Oracle SELECT WHERE значение существует или не существует - PullRequest
1 голос
/ 15 октября 2011

у меня 3 таблицы; CASES, USERS и USER_META. Для этой проблемы вам нужно знать, что таблица USER_META имеет 3 столбца; user_id, meta_key и meta_value

Каждый пользователь связан со многими CASES, а каждый USER связан со многими USER_META

Мой текущий запрос похож на это

SELECT CASES.*, USERS.*, USER_META.*
FROM CASES
JOIN USERS ON USERS."user_id" = CASES."user_id"
JOIN USER_META ON USER_META_"user_id" = USERS."user_id"

Проблема этого подхода заключается в том, что у каждого пользователя USER_META LOT , поэтому в моем наборе результатов слишком много строк. Как я могу переписать этот запрос так, чтобы я мог выбрать только USER_META, где USER_META. "Meta_key" равен определенному значению , но все же получить результат, если у них еще нет этого USER_META. "Meta_key"

Например:

SELECT CASES.*, USERS.*, USER_META.*
FROM CASES
JOIN USERS ON USERS."user_id" = CASES."user_id"
JOIN USER_META ON USER_META_"user_id" = USERS."user_id"
WHERE USER_META."meta_key" = 'my_key'

Это будет прекрасно работать, но не все пользователи имеют значение "my_key" в столбце "meta_key", и нам все еще нужно просмотреть их CASE. Для пользователей, у которых нет «meta_key», результат должен просто возвращать столбцы CASE и USER.

Как мне переписать этот запрос, чтобы он получал результат для обоих пользователей с этим meta_key и без него?

Спасибо, надеюсь, это имеет смысл.

Ответы [ 2 ]

4 голосов
/ 15 октября 2011

Я бы использовал левое соединение

SELECT CASES.*, USERS.*, USER_META.*
FROM CASES
JOIN USERS ON USERS."user_id" = CASES."user_id"
LEFT JOIN USER_META ON USER_META."user_id" = USERS."user_id" AND USER_META."meta_key" = ?
1 голос
/ 15 октября 2011

вам нужно использовать OUTER JOIN с таблицей, которая может не иметь результатов.В Oracle используйте (+) рядом с именем поля предложения соединения с этой таблицей.Эта ссылка может вам помочь: http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/queries006.htm

...