Вы не можете (и вообще не должны пытаться) контролировать то, как база данных выполняет запрос. SQL - это описательный язык: вы сообщаете базе данных желаемые результаты и доверяете ей принятие наилучшего решения с точки зрения плана выполнения - разработчики баз данных приложили много усилий для создания механизмов, которые наилучшая возможная стратегия.
Я бы просто добавил еще одно условие в предложение on
в left join
; это самый простой способ express того, что вы хотите:
select a.id, a.in_table_b, b.foobar
from a
left join b on a.id = b.id and a.in_table_b;
Я бы порекомендовал индекс для a(in_table_b, id)
: это может каким-то образом намекнуть планировщику запросов, как действовать (порядок столбцов в здесь важен индекс). Однако можно также подумать, что логический столбец - не очень хороший выбор, потому что количество элементов не очень хорошее (есть только два возможных значения). База данных может по-прежнему go для поиска по индексу - и на самом деле, это вполне может быть наиболее эффективным вариантом.