即使在数据库中找不到结果,如何获取值 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