2014-12-24 52 views
1

我有两个表T1和T2。我想从T2表中选择所有行,其中t1_id不等于T1表中的任何id。这是行不通的:在相关表上选择SQL语句

SELECT t2.id, t2.t1_id, t2.data FROM T2.t2, T1.t1 WHERE t2.t1_id != t1.id 
+1

SELECT x。* FROM x LEFT JOIN y ON y.id = x.id WHERE y.id IS NULL – Strawberry

回答

1

你可以使用子查询使用NOT IN子句如下:

SELECT t2.id, t2.t1_id, t2.data 
FROM T2 t2 
WHERE t2.t1_id NOT IN (SELECT DISTINCT id 
         FROM T1) 
0
SELECT t2.id, t2.t1_id, t2.data 
FROM T2.t2 
LEFT JOIN T1.t1 ON t2.t1_id = t1.id 
GROUP BY t2.id, t2.t1_id, t2.data 
HAVING sum(t1.id is not null) = 0 
1

使用LEFT JOIN来从左表中的所有记录,并添加where条件与检查第二个表的空值以找到不匹配的左表记录

试试这个:

SELECT t2.id, t2.t1_id, t2.data 
FROM T2.t2 
LEFT OUTER JOIN T1.t1 ON t2.t1_id = t1.id 
WHERE t1.id IS NULL 
+0

我需要ti获取行,其中t1_id不等于T1中的任何id。 null不是eaxctly,导致我想要的... – nowiko