MySQL выбирает, если существует, но показывает значение без, если он не существует - PullRequest
0 голосов
/ 30 декабря 2018

Учитывая простой запрос, подобный следующему:

SELECT * from foo WHERE id IN (ids)

Допустим, я передаю идентификаторы 1,2,3, а идентификаторы 1 и 2 существуют, а 3 - нет.Как мне написать этот запрос, чтобы по-прежнему отображались 3 строки, но значение «да» отображается для 1 и 2, а «нет» для 3?

Мой запрос будет возвращать данные только для записей с идентификаторами 1 и 2, но я хочу, чтобы он отображался для каждого переданного мной идентификатора, но обозначал те, которых нет в таблице, простым "нет"'

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Этого можно достичь с помощью CTE, который содержит различные идентификаторы и LEFT JOIN.

WITH cte AS (
    SELECT 1 id 
    UNION ALL SELECT 2
    UNION ALL SELECT 3
)
SELECT 
    cte.id,
    CASE WHEN foo.id IS NULL THEN 'no' else 'yes' END
FROM
    cte
    LEFT JOIN foo on foo.id = cte.id
0 голосов
/ 30 декабря 2018

Вам нужно создать отношение, содержащее все идентификаторы, а затем оставить присоединение foo к идентификаторам.В CASE вы можете проверить, что идентификатор из foo равен NULL и вывести 'no', если он есть, 'yes' в противном случае.

SELECT x.id,
       CASE
         WHEN f.id IS NULL THEN
           'no'
         ELSE
           'yes'
       END yesorno
       FROM (SELECT 1 id
             UNION ALL
             SELECT 2 id
             UNION ALL
             SELECT 3 id) x
            LEFT JOIN foo f
                      ON f.id = x.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...