即使在数据库中找不到结果,如何获取值 mysql
How get a Value even if result is not found in the DB mysql
即使数据库中不存在数据,我也需要找到正确的查询来获取值。
我的 table 名为“prova”:
it
en
de
data
data
riga
row
linie
parola
如果我查询:
SELECT en,de FROM `prova` WHERE `it` IN ("data","riga");
结果是:
en
de
data
row
linie
没关系!
但是
SELECT en,de FROM `prova` WHERE `it` IN ("data","riga","ciao","parola");
结果是:
en
de
data
row
linie
符合标准 mysql 但对我来说是个问题。
想要的结果是:
en
de
data
not found
row
linie
not found
not found
not found
not found
我为什么要这个?
我需要查询一个字符串数组,实际上我需要一个一个地查询字符串,并检查查询是否为空。结果数组的大小和顺序应等于给定数组。
实际上我需要执行 8700 个查询,这将帮助我将查询数量减少到 8 个。
谢谢
使用coalesce
用默认值填充空值。
select
coalesce(en, 'not found'),
coalesce(de, 'not found')
...
对于第二部分,如何使所有 in
值显示为行,请参阅 。
您可以使用 returns 字符串数组的 cte,其数字与结果中字符串的顺序相对应,并且 LEFT
加入 table:
WITH cte(id, word) AS (VALUES
ROW(1, 'data'), ROW(2, 'riga'), ROW(3, 'ciao'), ROW(4, 'parola')
)
SELECT COALESCE(p.en, 'not found') en,
COALESCE(p.de, 'not found') de
FROM cte c LEFT JOIN prova p
ON p.it = c.word
ORDER BY c.id;
或者,UNION ALL
对于 8.0 之前的 MySql 版本没有 cte 支持:
SELECT COALESCE(p.en, 'not found') en,
COALESCE(p.de, 'not found') de
FROM (
SELECT 1 id, 'data' word UNION ALL
SELECT 2, 'riga' UNION ALL
SELECT 3, 'ciao' UNION ALL
SELECT 4, 'parola'
) t
LEFT JOIN prova p ON p.it = t.word
ORDER BY t.id;
参见demo。
即使数据库中不存在数据,我也需要找到正确的查询来获取值。
我的 table 名为“prova”:
it | en | de |
---|---|---|
data | data | |
riga | row | linie |
parola |
如果我查询:
SELECT en,de FROM `prova` WHERE `it` IN ("data","riga");
结果是:
en | de |
---|---|
data | |
row | linie |
没关系!
但是
SELECT en,de FROM `prova` WHERE `it` IN ("data","riga","ciao","parola");
结果是:
en | de |
---|---|
data | |
row | linie |
符合标准 mysql 但对我来说是个问题。
想要的结果是:
en | de |
---|---|
data | not found |
row | linie |
not found | not found |
not found | not found |
我为什么要这个?
我需要查询一个字符串数组,实际上我需要一个一个地查询字符串,并检查查询是否为空。结果数组的大小和顺序应等于给定数组。
实际上我需要执行 8700 个查询,这将帮助我将查询数量减少到 8 个。
谢谢
使用coalesce
用默认值填充空值。
select
coalesce(en, 'not found'),
coalesce(de, 'not found')
...
对于第二部分,如何使所有 in
值显示为行,请参阅
您可以使用 returns 字符串数组的 cte,其数字与结果中字符串的顺序相对应,并且 LEFT
加入 table:
WITH cte(id, word) AS (VALUES
ROW(1, 'data'), ROW(2, 'riga'), ROW(3, 'ciao'), ROW(4, 'parola')
)
SELECT COALESCE(p.en, 'not found') en,
COALESCE(p.de, 'not found') de
FROM cte c LEFT JOIN prova p
ON p.it = c.word
ORDER BY c.id;
或者,UNION ALL
对于 8.0 之前的 MySql 版本没有 cte 支持:
SELECT COALESCE(p.en, 'not found') en,
COALESCE(p.de, 'not found') de
FROM (
SELECT 1 id, 'data' word UNION ALL
SELECT 2, 'riga' UNION ALL
SELECT 3, 'ciao' UNION ALL
SELECT 4, 'parola'
) t
LEFT JOIN prova p ON p.it = t.word
ORDER BY t.id;
参见demo。