SQL:从t1中选择t2中没有对应的所有行

时间:2015-11-18 07:36:23

标签: sql

我们说我有一个只有一列的表t1:id,我有一个包含两列的表t2:idMemo。我需要从t1中选择那些id,其中t2中没有满足以下两个条件t1.id = t2.idt2.Memo = 'myText'的行。我怎样才能做到这一点?我尝试过使用join,但选择满足某些条件的行,而我则需要相反。

3 个答案:

答案 0 :(得分:1)

SELECT *
  FROM t1
 WHERE NOT EXISTS (SELECT 1
                     FROM t2
                    WHERE t2.id = t1.id
                      AND t2.Memo = 'myText')

答案 1 :(得分:0)

一种方法是使用LEFT JOIN

select id
from t1
left join t2
  on t1.id = t2.id and t2.Memo = 'myText'
where t2.id is null

答案 2 :(得分:0)

我不善于理解你的问题:

你的意思是t2中的那些t1.id EXISTS但是相应的t2.Memo<> '会将myText'?

SELECT t1.id FROM t1 JOIN t2 
ON t1.id = t2.id
HAVING t1.id NOT IN (SELECT id FROM t2 WHERE Memo = 'myText');

或者所有t1.id要么不是t2中的EXISTS,要么是EXISTS,而是Memo<> '会将myText'?

SELECT id FROM t1 WHERE id NOT IN (SELECT id FROM t2 WHERE Memo = 'myText');