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'

Как это?

Другие вопросы по тегам