Вы не можете. Ну, вы можете, если вы используете подзапрос в предложении from
:
select A.a, B.b
from A left join
(select B.*
from B
where B.b = 'xyz'
) B
on A.c = B.C;
Вы также можете использовать коррелированный подзапрос, если только одна строка соответствует ::
select A.a,
(select B.b
from B
where A.c = B.C and B.b = 'xyz'
) B
from A;
Или, Вы можете «объединить все» в дополнительных результатах:
select A.a, B.B
from A left join
B
on A.c = B.C
where B.b = 'xyz'
union all
select A.a, NULL
from A
where not exists (select 1 from B A.c = B.C and B.b = 'xyz')
Заманчиво написать:
select A.a, B.b
from A left join
B
on A.c = B.C
where B.b = 'xyz' or B.b is null;
Однако, это не тот же лог c. Обратите внимание:
A
A C
1 1
2 2
B
B C
xyz 1
abc 1
abc 2
Возвращается версия левого соединения:
1 xyz
2 null
Возвращается версия where
:
1 xyz
Строка "2" отфильтрована, поскольку имеется совпадение с другим значением.