Mysql

顯示尚未在數據庫中的數據

  • December 4, 2018

我有以下問題。我想在現有數據庫中搜尋查詢,結果向我顯示了數據庫中尚不存在的查詢條目。

最小的例子:

| 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 &lt; (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

引用自:https://dba.stackexchange.com/questions/224061