需要有关在一个表中查找值的帮助,而不是在另一个表中存在,反之亦然

时间:2011-10-26 00:16:19

标签: sql database oracle

我正在使用Oracle。

我有2个表,每个表都有一个userID和entitlementID。我想选择表1中存在但不在表2中的权利,反之亦然。我需要输出看起来像:

USER_ID| ENTITLEMENT_1 | ENTITLEMENT_2

 33    |    44    |    <NULL>
 54    |    <NULL>|    55
 33    |    <NULL>|    32

3 个答案:

答案 0 :(得分:3)

如果您只查找 一个表中存在的权利而不是另一个表中的权利,那么这不仅仅是一个简单的外部联接。

SELECT t1.userid, t1.entitlement_1, NULL AS entitlement_2
  FROM table1 t1
 WHERE NOT EXISTS ( SELECT 1 FROM table2 t2 
                     WHERE t2.userid = t1.userid
                       AND t2.entitlement_2 = t1.entitlement_1 )
UNION ALL
SELECT t2.userid, NULL AS entitlement_1, entitlement_2
  FROM table2 t2
 WHERE NOT EXISTS ( SELECT 1 FROM table1 t1
                     WHERE t1.userid = t2.userid
                       AND t1.entitlement_1 = t1.entitlement_2 )

第一个选择查找table2中不存在的userid和entitlement_1对,第二个选择则相反。您没有提供有关所涉及的表的大量信息,例如,如果userid或(userid,entitlement)是主键或任何内容,那么这可能会被优化。

答案 1 :(得分:-1)

您需要执行完全外部联接才能完成此任务。

以下是有关外连接的更多信息:

http://en.wikipedia.org/wiki/Join_(SQL)#Outer_joins

答案 2 :(得分:-1)

这应该适合你:

SELECT * FROM Table1 t1
LEFT JOIN 
  (SELECT userID FROM Table2)
  AS t2 ON t1.userID=t2.userID