[英]Select unmatched records from two tables of MYSQL
我有两个表 Table1 和 Table2 有一些记录
id 是两个表中的公共列,primarykey 设置为 table1 中的此列
table1 中有很多记录,其中一些记录(不是全部)更新到 table2 中。
现在我想从 table1 中检索未更新到 table2 中的记录。
例如在 table1 中有记录 1,2,3,4,5,6,7,8,9
在表2中有3,4,7,9
现在我如何从 table1 1,2,5,6 中检索这些未更新到 table2 中的记录
我写了这个查询:
SELECT Table1.id, Table1.DATE, Table1.C_NAME, Table1.B_NAME
FROM [Table1] INNER JOIN Table2 ON Table1.SLIPNO <>Table2.id;
但预期的结果并没有到来。 此查询列出了每条记录重复多次的所有记录
任何机构都可以给我解决方案以获得预期的结果。
select *
from table1
where table1.slip_no NOT IN (select id from table2)
假设公共列的名称是id
或者您可以将查询修改为
SELECT distinct (Table1.id, Table1.DATE, Table1.C_NAME, Table1.B_NAME)
FROM [Table1]
INNER JOIN Table2 ON Table1.SLIPNO <>Table2.id
SQL 连接的一个很好的参考
SELECT t1.*
FROM table1 AS t1
LEFT OUTER JOIN table2 AS t2 USING(id)
WHERE
t2.id IS NULL;
尝试这个
SELECT Table1.id, Table1.DATE, Table1.C_NAME, Table1.B_NAME FROM [Table1]
WHERE
NOT EXISTS (SELECT * from Table2 WHERE Table1.SLIPNO !=Table2.id );
您可以在table2的子查询上使用NOT IN
运算符。
或者,将MINUS与两个常规查询一起使用,列出每个表中的ID :
SELECT id FROM table1
MINUS
SELECT id FROM table2;
您可以使用以下查询
SELECT id FROM database1.table WHERE id NOT IN(SELECT id FROM database2.table)
SELECT child_table.id FROM child_table LEFT JOIN parent_table ON child_table.parent_id = parent_table.id WHERE parent_table.id IS NULL
当 parent_table 中没有匹配项时,此左连接查询返回 child_table 的所有记录。 当没有匹配项时,所有 parent_table 字段都将为 NULL。
inner join
将无济于事。 为了获得无与伦比的记录,我试过这个:
SELECT
A.ID,A.DATE,A.NAME
FROM TABLE1 A
WHERE CONCAT(A.ID , A.DATE ,A.NAME)
NOT IN
(SELECT CONCAT(B.ID , B.DATE ,B.NAME) as X
from TABLE2 B) ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.