如果列表中的键不存在,则希望 Sqlite SELECT 语句为 return 默认值

Wanting Sqlite SELECT statement to return default values if not existing for keys in a list

我有以下 table,在 SQLITE 中有一个示例条目:

CREATE TABLE image (key CHAR(128) NOT NULL PRIMARY KEY, value CHAR(32) NOT NULL); INSERT INTO image VALUES ('key1', 'value1');

我希望能够在单个 SQL 语句中查找键列表 ['key1','key2']。我想要的预期响应如下:

| key        | value         |
|************|***************|
| key1       | value1        |
| key2       | default       |

我环顾四周,但无法解决这个问题。我试过以下方法

SELECT key, IFNULL(value, 'default') value FROM image WHERE key IN ('key1', 'key2');

和其他涉及合并等的变体,但这只有 key1 的 returns 值,而不是 key2 的值(我知道这是预期的行为)。

如何编写一条 SELECT 语句来提供上述预期响应?我似乎无法为我的生活弄清楚这一点。提前致谢。

查询只能return FROM 子句中某些table/view/subquery 中实际存在的行;您在 SELECT 表达式列表中所做的任何事情都无法改变这一点。

因此您必须使用这些值创建一些行(使用子查询或 common table expression), and then check whether there are matching rows in the table (with an outer join):

WITH list(key) AS (
  VALUES ('key1'), ('key2')
)
SELECT key,
       IFNULL(value, 'default') AS value
FROM list
LEFT JOIN image USING (key);