Нужна помощь в поиске значений в одной таблице, а в другой таблице их нет, и наоборот - PullRequest
0 голосов
/ 26 октября 2011

Я использую Oracle.

У меня есть 2 таблицы, у каждой таблицы есть userID и authorlementID.Я хочу выбрать права, которые существуют в таблице 1, но не в таблице 2, и наоборот.Мне нужен вывод, чтобы выглядеть так:

USER_ID| ENTITLEMENT_1 | ENTITLEMENT_2

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

Ответы [ 3 ]

3 голосов
/ 26 октября 2011

Это не просто внешнее объединение, если вы ищете только для тех прав, которые существуют в одной таблице, а не в другой.

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 )

Первый выбор находит идентификатор пользователяи пары rightlement_1, которых нет в table2, а второй выбор делает обратное.Вы не предоставили много информации о задействованных таблицах, например, является ли идентификатор пользователя или (идентификатор пользователя, право) первичным ключом или чем-то еще, поэтому его можно оптимизировать.

0 голосов
/ 26 октября 2011

Это должно работать для вас:

SELECT * FROM Table1 t1
LEFT JOIN 
  (SELECT userID FROM Table2)
  AS t2 ON t1.userID=t2.userID
0 голосов
/ 26 октября 2011

Для выполнения этой задачи необходимо выполнить полное внешнее объединение.

Подробнее о внешних объединениях:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...