由于某种原因,找不到适合我的主题的任何内容: 如果结果集为空,则返回示例行并且类似的问题使用整数进行连接。
我有一个结构简单的表:pk::int、key::varchar、value::varchar
我需要按键列进行搜索并返回多个值。如果没有匹配的行(空结果集),我想返回默认值,例如单词“default”。
简单的解决方案是使用带有UNION和LIMIT 1 的CTE 或子查询,但查询应该能够返回多个值(键列可能包含重复项),因此这不是解决方案。
我想出了这个,它正在起作用:
SELECT value FROM mytable
WHERE key = 'foobar'
UNION
SELECT 'default' AS value
WHERE (SELECT COUNT(*) FROM mytable WHERE key = 'foobar') <1
但子查询使数据查询量增加了一倍。
有没有更优雅、更高效的解决方案?
您可以使用左连接。
假设值不能为空,那么您可以使用合并来决定实际值和默认值
但如果 value 可以为 NULL,你就需要一些更奇特的东西:
或者更晦涩地说,您可以将 t 设为一个 0 列但一行的表格:
您一开始就没有表现出任何性能问题。所以很难评估我们是否已经修复了它们。