У меня есть таблица, назовем ее «a», которая используется в левом соединении в представлении, которое включает в себя множество таблиц. Тем не менее, я хочу только вернуть строки «a», если они также присоединяются к другой таблице «b». Таким образом, существующий код выглядитОграничение LEFT JOIN
SELECT ....
FROM main ...
...
LEFT JOIN a ON (main.col2 = a.col2)
, но он возвращает слишком много строк, конкретно те, где не имеют аналогов в б. Я попытался
SELECT ...
FROM main ...
...
LEFT JOIN (
SELECT a.col1, a.col2
FROM a
JOIN b ON (a.col3 = b.col3)) ON (a.col2 = main.col2)
, который дает мне правильные результаты, но, к сожалению, «EXPLAIN PLAN» говорит, что делает это таким образом в конечном итоге вынудив полный просмотр таблицы А и Б, который делает вещи довольно медленно. Один из моих сотрудников предложил другую LEFT JOIN на b, но это не работает, потому что она дает мне строку b, когда она присутствует, но не перестает возвращать строки из числа, которые не имеют соответствия в b.
Есть ли способ поместить условие main.col2 в sub-SELECT, которое избавится от полного сканирования таблицы? Или какой-то другой способ сделать то, что я хочу?
По какой-то нечетной причине левое соединение теперь действует как нормальное соединение. –
+1 Это именно то, что я собирался предложить. –
Хорошо, не обращая внимания на то, что я сказал раньше, - я это исправил. –