我正在使用Oracle。
我有2个表,每个表都有一个userID和entitlementID。我想选择表1中存在但不在表2中的权利,反之亦然。我需要输出看起来像:
USER_ID| ENTITLEMENT_1 | ENTITLEMENT_2
33 | 44 | <NULL>
54 | <NULL>| 55
33 | <NULL>| 32
答案 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)
答案 2 :(得分:-1)
这应该适合你:
SELECT * FROM Table1 t1
LEFT JOIN
(SELECT userID FROM Table2)
AS t2 ON t1.userID=t2.userID