如果列表中的键不存在,则希望 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);
我有以下 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);