0

我有 2 张大桌子,我需要检查它们之间有多少关系仍然处于活动状态。第一个表是一个关系表,其中包含大约 100k 行(ID、ID_something1、ID_something2)。第二个表稍大一些,大约有 600 万个与特定关系相关的条目。随着时间的推移,一些关系被删除,但数据仍然存在。现在我很好奇有多少数据仍然完好无损。

所以我写了类似的东西:

SELECT count(tab_data.id) 
FROM tab_data, tab_rel
WHERE tab_data.id_rel = tab_rel.id

我在不到几秒钟的时间内得到了一个很好的(可信的)答案。

然后我开始质疑上面的 WHERE 子句的准确性,并将其改写为应该满足我需求的东西。所以我最终得到了这个:

SELECT count(tab_data.id) 
FROM tab_data, tab_rel
WHERE tab_data.id_rel IN 
(SELECT ID FROM tab_rel)

简而言之(呃),经过半小时的 CPU 折磨,我关闭了 MySQL 服务器并重新启动它:S 从那时起,我读到 MySQL 中的 WHERE IN 子句存在(或曾经)问题,所以我我想我不会再尝试那个了。

IMO 这两个查询应该是相同的,但我需要 100% 确定。所以我真正需要的是,有人来证实我的预感并告诉我一些事情:“别担心,这两个会给出相同的结果!”

当我们使用它时......该表只是称为关系表,因为这就是我使用它的目的。但我没有设置任何外键。我会通过添加这些来获得任何与时间相关的东西,还是我也必须重新编码一些东西?(在阅读您的答案之前,我可能会对此进行研究,但是由于您已经阅读了所有这些内容,因此您可以投入 2 美分:D)

4

0 回答 0