Oracle SQL - 使用连接查找一个表中的值,而不是另一个

问题描述:

因为显然每个人都讨厌子选择,所以我想用连接来完成。Oracle SQL - 使用连接查找一个表中的值,而不是另一个

对于一个令人难以置信的人为的例子,采取两个表,其中一个从1-6的数字列表和一个从0-8的偶数列表。然后,我的目标是输出表格Nums中的所有奇数。

Table Nums 
Number 
One 
Two 
Three 
Four 
Five 
Six 

Table Even 
Number 
Zero 
Two 
Four 
Six 
Eight 

如果我只是想获得偶数是在订购数量,我会做的列表...

select nums.number 
FROM nums, 
    even, 
where nums.number = even.number; 

但是,我怎么能使用这些表来获取列表在桌子Nums的non-evens?或者,换句话说,有点像......如果使用得当......“有人不喜欢的东西”本身并不是一个好足够的理由恕我直言

select nums.number 
from nums 
where nums.number not in (select number from even); 

子查询的罚款。

有几个选项 - 仅有2为例:

SELECT nums.number FROM nums 
LEFT OUTER JOIN even ON even.number = nums.number 
WHERE even.number IS NULL 

OR

SELECT nums.number FROM nums 
MINUS 
SELECT even.number FROM even 
+1

@Jeremy如果您需要使用SQL Server来做到这一点,那么请使用EXCEPT,这与Oracle的MINUS相同。 – Yahia 2012-02-09 08:18:28

对于Oracle:

select nums.number 
    FROM nums, 
     even 
where nums.number = even.number(+) 
    and even.number is null; 

为ANSI SQL:

SELECT nums.number 
    FROM nums LEFT OUTER JOIN even ON nums.number = even.number 
WHERE even.number IS NULL; 
+0

感谢您使用oracle语法。我仍然不知道如何阅读其他语法。 – Jeremy 2012-02-09 07:44:59

+1

ansi SQL也适用于Oracle,除此之外它还可以用于其他数据库。我建议你使用第二个,因为它不是供应商特定的,如果你的DB改变你的sql仍然可以工作,但是如果你使用Oracle特定的SQL语句,你可能需要在改变DB的时候检查你的代码。 – dursun 2012-02-09 07:51:16