У меня есть простой сценарий, но изо всех сил на него:Возвращаемое значение, если запись не существует на присоединиться, оракул
Скажем, у меня есть следующие 2 таблицы:
tableA
Acol1 Acol2 Acol3
1 2 3
tableB
Bcol1 Bcol2 Bcol3
1 2 true
Запрос:
select tabB.Bcol3 from tableA tabA, tableB tabB
where
tabA.Acol1 = tabB.Bcol1
and tabB.Bcol2 = 1
and tabA.Acol1 = 1;
Я хочу, чтобы мой запрос возвращал значение «false», поскольку для этого запроса не существует записи.
P.S: Я не могу использовать агрегированные функции, потому что на самом деле этот сценарий является частью более крупного запроса с примерно 15 соединениями и несколькими столбцами.
Так следующее решение из контекста:
select decode(max(tabB.Bcol3), null, 'FALSE', 'TRUE') from tableA tabA, tableB tabB
where
tabA.Acol1 = tabB.Bcol1
and tabB.Bcol2 = 1
and tabA.Acol1 = 1;
я попытался левый и правый внешние соединения, но тщетно.
Thx, но я просто переработал маленькая ошибка. В моем вопросе соединение является достаточно успешным, но запись не существует в фильтре (где предложение). i.e. Соединение похоже на: tabA.Acol1 = tabB.Bcol1 – user1933888
К сожалению. Я починил это. Просто переместите условие на rableb из htte ckause в предложение join. Попробуй это сейчас. – Bohemian
Thx: он работает хорошо (не уверен, почему я не пробовал) :) Я по своей сути предпочитаю оператор (+) представлению ansi, запрос выглядит более чистым таким образом (особенно более крупные). Я знаю, что люди будут на меня нахмуриться, говоря это. Тем не менее Следующий запрос будет эквивалентом вышеуказанного запроса вы дали право ?: выберите COALESCE (tabB.Bcol3, ложь) от TABLEA Табе, TableB TABB где tabA.Acol1 = tabB.Bcol2 (+) и TABB .Bcol2 (+) = 1 и tabA.Acol1 = 1; – user1933888