给出一个简单的查询,如下所示:
SELECT * from foo WHERE id IN (ids)
说我将id 1,2,3
以及id 1
和2
的存在传递,而3
则不存在。如何编写此查询,以便仍然显示3行,但是1和2的值为“是”,而3的值为“否”?
我的查询只会返回ID为1和2的记录的数据,但是我希望它为我传递的每个ID都显示,但是用一个简单的'no'来表示不在表中的那些>
答案 0 :(得分:1)
您需要创建一个包含所有ID的关系,然后在ID上保留联接foo
。然后,您可以在CASE
中检查foo
中NULL
的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