繁体   English   中英

从MYSQL的两个表中选择不匹配的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM