Mysql
顯示尚未在數據庫中的數據
我有以下問題。我想在現有數據庫中搜尋查詢,結果向我顯示了數據庫中尚不存在的查詢條目。
最小的例子:
| ID | name | | 1 | Paul | | 2 | Clara |
身份查詢 (1,3)
結果應該是3!
所以我想做這樣的事情:
Select * from names Where ID Not in (1,3);
但是,這顯然是不正確的。
此外,我不想在查詢中插入額外的表!有誰知道這個問題的解決方案?
如果您的列表很小,您可以使用以下語法:
SELECT * FROM (SELECT 1 Id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) val WHERE Id NOT IN (SELECT ID FROM tbl);
| 身份證 | | -: | | 2 | | 4 |
db<>在這裡擺弄
SELECT args_list.id FROM ( SELECT 1 id UNION ALL SELECT 3 ) args_list /* the ID's you need to check for presence */ LEFT JOIN names ON args_list.id = names.id WHERE names.id IS NULL
在 MySQL 8+ 中,您可以將 id 的列表作為 CSV 字元串傳輸到查詢中,並將其解析為 CTE 中的單獨值。它會像(未測試)
WITH src AS ( SELECT '1,3' src ), RECURSIVE num AS ( SELECT 1 num UNION ALL SELECT num + 1 FROM num WHERE num < (SELECT MAX(LENGTH(src) - LENGTH(REPLACE(src, ',', '')) FROM src) ), ids AS ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(src, ',', num), ',', -1) FROM src, num ) SELECT ids.id FROM ids LEFT JOIN names ON ids.id = names.id WHERE names.id IS NULL