2010-08-12 47 views
2

我如何可以使用连接SQL:选择不

SELECT * 
FROM table1 
WHERE id NOT IN 
( 
    SELECT t1Id 
    FROM table2 
); 
+0

听起来像功课改写下面的查询! – JNK 2010-08-12 12:49:07

+0

不是不是,我只是好奇:) – Muhammad 2010-08-12 13:03:39

回答

0
 SELECT * FROM table1 t1 
     WHERE NOT EXISTS( 
     SELECT * 
     FROM table2 t2 
     Where t1.Id = t2.t1Id); 
+0

OP确实特别要求一种方法使用JOIN – 2010-08-12 13:12:56

+0

@Mark,ops,错过了:( – 2010-08-12 13:19:30

+0

这似乎是一个毫无意义的规范,例如他们可以说,“重写以下内容查询时不使用字母'u'“,你会得到积分;) – onedaywhen 2010-08-12 14:29:26

8
SELECT * 
FROM table1 t1 
left outer join table2 t2 on t1.id=t2.id 
where t2.id is null 
+0

你很快!打我。 – Nix 2010-08-12 12:50:34

+0

非常感谢!但我不明白这个逻辑,为什么要使用“on t1.id = t2.id”?我们正在查找t1中未在t2中引用的行,并且您告诉它将加入t1.id = t2.id,这意味着它将在t2中引用的行上进行联接......对我来说,它看起来不合逻辑 也,我注意到,没有“外部”相同的查询工作原理是一样.. SELECT * FROM 表1 T1 左连接表2 T2上t1.id = t2.id 其中t2.id为空 – Muhammad 2010-08-12 13:00:31

+0

@Muhammand - 中'left outer join'语法意味着即使t2的连接条件失败,t1的行也会被返回,并且'where t2.id为null'将过滤出连接条件失败的所有行,如在这些情况下, t2.id将被映射为空。 – 2010-08-12 13:03:23