select *
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where t1.some_field = nvl(t2.some_field, t1.some_field)
UPD: ошибка ... нет. таким образом:
select *
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where some_required_value = nvl(t2.some_field, some_required_value)
nvl
- это синтаксис Oracle, который заменяет первый аргумент вторым, если он равен null
(что является общим для внешних объединений). Вы можете использовать ifnull
или coalesce
для других баз данных.
Таким образом, вы сравниваете t2.some_field
с критериями поиска, если он соответствует предикату соединения, но если нет, то вы просто возвращаете строку из table1
, поскольку some_required_value
по сравнению с самим собой всегда будет истинным (если только это null
, однако - null = null
дает null
, ни true
не false
.