sql >> Database teknologi >  >> RDS >> Mysql

Vælg værdier fra en liste, der ikke er i en tabel

Et vikarbord er den bedste løsning, men hvis det ikke er muligt, kan du fudge et vikarbord ved at vælge konstanter og forbinde dem sammen.

Ved at bruge denne løsning kan du gøre følgende:-

SELECT i
FROM 
(
    SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 6 UNION SELECT 7
) AS mylistofids 
LEFT JOIN mytable
ON mytable.id = i
WHERE mytable.id IS NULL;
 

Du kan også generere et enormt udvalg af tal (forudsat at du har at gøre med heltals-id'er) ved at krydsforbinde rækker af tal. Vælg derefter dem, der er i IN-sætningen:-

SELECT i FROM ( SELECT units.i + tens.i * 10 + hundreds.i * 100 + thousands.i * 1000 + tensthousands.i * 10000 AS i FROM (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS units CROSS JOIN (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS tens CROSS JOIN (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS hundreds CROSS JOIN (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS thousands CROSS JOIN (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0 ) AS tensthousands ) AS mylistofids LEFT JOIN mytable ON mytable.id = i WHERE mylistofids.i IN (1, 2, 3, 6, 7) AND mytable.id IS NULL;


  1. Hvad virtuelle filstater gør, og ikke gør, fortæller dig om I/O-forsinkelse

  2. MySQL IF() Funktion forklaret

  3. 2 måder at sammenkæde en streng og et tal i Oracle

  4. Sådan installeres MySQL med phpMyAdmin på Ubuntu 12.04