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

时间:2011-11-25 07:05:39

标签: php mysql sql

我有两个表Table1和Table2,有一些记录

id是两个表中的公共列,primarykey设置为table1

中的此列

table1中有许多记录,其中一些记录(不是全部)更新到table2中。

现在我想要从table1中检索未更新到table2中的记录。

例如,在表1中有记录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;

但预期结果不会到来。此查询列出了多次重复每个记录的所有记录

任何机构都可以给我解决方案以获得预期的结果。

7 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

关于SQL联接的reference好{/ p>


SELECT t1.* 
   FROM table1 AS t1 
   LEFT OUTER JOIN table2 AS t2 USING(id)
   WHERE 
       t2.id IS NULL; 

答案 2 :(得分:2)

您可以在 table2 的子查询中使用NOT IN运算符。

或者,使用MINUS和两个常规查询列出每个表中的 ID

 SELECT id FROM table1
 MINUS
 SELECT id FROM table2;

答案 3 :(得分:2)

试试这个

SELECT Table1.id, Table1.DATE, Table1.C_NAME, Table1.B_NAME FROM [Table1]
 WHERE 
NOT EXISTS (SELECT *  from Table2 WHERE Table1.SLIPNO !=Table2.id );

答案 4 :(得分:1)

您可以使用以下查询

SELECT id FROM database1.table WHERE id NOT IN(SELECT id FROM database2.table)

答案 5 :(得分:0)

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。

答案 6 :(得分:-1)

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) ;