sql: проверить наличие только одного определенного элемента для идентификатора, когда может существовать несколько элементов
У меня есть база данных местоположений, которые могут иметь от 0 до 27 типов журналов. Меня интересует только наличие 1 типа журнала и я хочу вернуть true или false, если этот журнал существует. Я попытался использовать CASE WHEN, но проблема в том, что мои результаты показывают true или false, если существует один журнал (который является желаемым результатом), а затем false для всех остальных журналов, поэтому я получаю несколько строк с одинаковым идентификатором (который является не то, что я хочу). Образец кода:
SELECT
Table1.LocationId
, CASE WHEN Table2.LogId = 8 THEN 'True' ELSE 'False' END AS 'Log8Avail'
Желаемый результат будет:
| LocationID |Log8Avail|
----------------------
| 1 | True |
----------------------
| 2 | False |
----------------------
| 3 | True |
----------------------
Но то, что я сейчас получаю, это:
| LocationId | Log8Avail|
-----------------------
| 1 | True |
-----------------------
| 1 | False |
-----------------------
| 1 | False |
-----------------------
| 2 | False |
-----------------------
У меня вопрос, как я могу настроить свой запрос так, чтобы он только проверял наличие или отсутствие конкретного журнала, который меня интересует?
2 ответа
Решение
SELECT t1.LocationId,
CASE WHEN t2.LogID IS NULL
THEN false
ELSE TRUE
END as Log8Avail
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.id = t2.id
AND t2.LogId = 8
SELECT
Table1.LocationId
, CASE WHEN (SELECT COUNT(*)
FROM Table2
WHERE Table2.LogId = 8)>0 THEN 'True' ELSE 'False'
END AS 'Log8Avail'
Как это?