即使資料庫中不存在資料,我也需要找到正確的查詢來獲取值。
我有我的表名為“prova”:
| 它 | zh | 德 |
|---|---|---|
| 資料 | 資料 | |
| 里加 | 排 | 線涅 |
| 帕羅拉 |
如果我查詢:
SELECT en,de FROM `prova` WHERE `it` IN ("data","riga");
結果是:
| zh | 德 |
|---|---|
| 資料 | |
| 排 | 線涅 |
沒關系!
但
SELECT en,de FROM `prova` WHERE `it` IN ("data","riga","ciao","parola");
結果是:
| zh | 德 |
|---|---|
| 資料 | |
| 排 | 線涅 |
在標準mysql中正如預期的那樣,但對我來說是個問題。
期望的結果是:
| zh | 德 |
|---|---|
| 資料 | 未找到 |
| 排 | 線涅 |
| 未找到 | 未找到 |
| 未找到 | 未找到 |
我為什么要這個?
我需要對一個字串陣列進行查詢,實際上我需要一個一個地查詢字串,并檢查查詢是否為空。結果陣列的大小和順序應等于給定陣列。
實際上我需要執行 8700 個查詢,這將幫助我將查詢數減少到 8 個。
謝謝
uj5u.com熱心網友回復:
您可以使用 cte 回傳字串陣列,其數字對應于結果中字串的順序和LEFT表的連接:
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對于沒有 cte 支持的 8.0 之前的 MySql 版本:
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;
請參閱演示。
uj5u.com熱心網友回復:
用于使用coalesce默認值填充空值。
select
coalesce(en, 'not found'),
coalesce(de, 'not found')
...
對于第二部分,如何使所有in值顯示為行,請參閱此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/449358.html
標籤:mysql
下一篇:如何計算重復項?
