我有两个表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;
但预期结果不会到来。此查询列出了多次重复每个记录的所有记录
任何机构都可以给我解决方案以获得预期的结果。
答案 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) ;