В этом конкретном случае вам лучше использовать left
объединение :
select
u.FullName,
a.Address
from
users u
left join address a on
a.userid = u.userid
where
u.userid = 1000
Это вернет все null
для столбцов address
, если совпадений не найдено.
Однако, чтобы ответить на ваш вопрос в более общем смысле, вы можете использовать case
выражение в своем запросе, чтобы избежать необходимости иметь целый whoopla:
select
u.fullname,
case
when (select count(*) from address where userid = u.userid) > 0 then 1
else 0
end as AddressSupplied
from
users u
where
userid = 1000
case
- это оператор switch
в SQL, так что вы можете сделать это:
case col_name
when 'Val1' then 'Yup'
when 'Val2' then 'Well...'
when 'Val3' then 'Nope.'
else 'What now?'
end
Это проверит столбец col_name
в каждой строке, и, если это одно из указанных значений, он вернет правильное значение then
. Поэтому пример запроса и набора результатов:
select
col_name,
case col_name
when 'Val1' then 'Yup'
when 'Val2' then 'Well...'
when 'Val3' then 'Nope.'
else 'What now?'
end as some_col
from
tableA
--------------------
col_name some_val
--------------------
Val1 Yup
Val2 Well...
Val1 Yup
Val4 What now?
Val3 Nope.
Это также может работать в предложении where
, которое очень удобно для полуусловных запросов:
where
userid = case when @somevar > 0 then 1000 else 1001 end