SQL NOT LIKE返回所有行,而不是不同之处

时间:2019-05-23 12:32:20

标签: mysql sql

我有两个表,带有2个PK。表1有478条记录。字段1仅是该表的唯一ID。表1字段2是ID(与表2共享),第3字段是类别字段。字段2中的ID可以在表中重复,但是我不能同时拥有ID +类别。

我有第二张表,其中包含757条记录。它具有一个ID列和一个类别列(例如table1),我想知道表2中包含表1中的哪些记录。目前,我只是检查两个表中都包含哪些ID(我想清理一下数据库,这样我就可以使用AND查询来获取ID +类别)

我的SQL查询未返回所需结果。当我这样做

SELECT DISTINCT(table1.field1) FROM table1, table2 WHERE table1.ID = table2.ID;

我得到了所有匹配的结果,但是当我做相反的时候

SELECT table1.field1 FROM table1, table2 WHERE table1.ID != table2.ID;

SQL给出了表1中的所有行,预期结果将是

表1中的总行-与表2中的ID确实匹配的ID

我试图将查询的显示顺序反转为:

SELECT table1.field1 FROM table1, table2 WHERE table2.ID != table1.ID; 但是随后发生一个循环,我得到36000+的结果,这当然是不可能的(我想像一下,将较大的记录表与较小的记录表进行比较会使一个较小的循环不断地循环,然后看到我得到了整个表时间,循环是Xtimes478,因此结果超过36000。)

我已经使用R检查了此匹配/不匹配的查询(仅用于测试),我得到了170个匹配项(可以在SQL中获得)和308个“不一致”结果(170 + 308 = 478,所以我想它会使即使我使用R而不是适当的关系数据库系统也很有意义)

如何在查询中搜索不匹配的ID,而不是检查匹配的ID并从总数中减去?如何获取不匹配的308条记录?

1 个答案:

答案 0 :(得分:0)

如果希望表1中的值不在表2中,请使用store.push或类似的方法:

not exists