MySQL选择是否存在,但如果不存在则显示值

时间:2018-12-29 21:57:31

标签: mysql sql

给出一个简单的查询,如下所示:

SELECT * from foo WHERE id IN (ids)

说我将id 1,2,3以及id 12的存在传递,而3则不存在。如何编写此查询,以便仍然显示3行,但是1和2的值为“是”,而3的值为“否”?

我的查询只会返回ID为1和2的记录的数据,但是我希望它为我传递的每个ID都显示,但是用一个简单的'no'来表示不在表中的那些

2 个答案:

答案 0 :(得分:1)

您需要创建一个包含所有ID的关系,然后在ID上保留联接foo。然后,您可以在CASE中检查fooNULL的ID,如果是,则输出'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;

答案 1 :(得分:0)

这可以通过拥有不同ID的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