我有2个大桌子,我需要检查它们之间有多少关系仍处于活动状态。 第一个表是一个关系表,其中包含大约100k行(ID,ID_something1,ID_something2)。第二个表格稍大一些,约有6万个条目与特定关系有关系。随着时间的推移,一些关系被删除,但数据仍然存在。现在我很好奇有多少数据仍然存在。
所以我写了类似的东西:
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会给出相同的结果!”
虽然我们正在使用它...这个表只是一个关系表,因为这就是我用它的原因。但我没有设置任何外键。我会通过添加这些来获得相关的时间吗?或者我是否还需要重新编码某些东西? (在我读你的答案之前,我可能会研究一下,但既然你已经阅读了所有这些,你可以投入2美分:D)