У меня есть таблица, давайте назовем ее «a», которая используется в левом соединении в представлении, которое включает в себя множество таблиц. Однако я хочу вернуть только строки «a», если они также соединяются с другой таблицей «b». Таким образом, существующий код выглядит как
SELECT ....
FROM main ...
...
LEFT JOIN a ON (main.col2 = a.col2)
но он возвращает слишком много строк, особенно те, где a не соответствует в b. Я пытался
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" говорит о том, что выполнение этого способа приводит к принудительному полному сканированию таблиц a и b, что делает процесс довольно медленным. Один из моих коллег предложил еще один LEFT JOIN на b, но это не сработает, потому что он дает мне строку b, когда она присутствует, но не прекращает возвращать строки из a, у которых нет совпадения в b.
Есть ли способ поместить условие main.col2 в sub-SELECT, что избавило бы от полного сканирования таблицы? Или каким-то другим способом делать то, что я хочу?