sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Välj från en lista med nummer de utan motsvarighet i id-fältet i en tabell

Detta är ett problem som är ganska vanligt:​​att skapa en relation i farten utan att skapa en tabell. SQL-lösningar för detta problem är ganska besvärliga. Ett exempel med en härledd tabell:

SELECT n.id
FROM
  (SELECT 2 AS id 
   UNION SELECT 3 
   UNION SELECT 4 
   UNION SELECT 5 
   UNION SELECT 6 
   UNION SELECT 7) AS n
  LEFT OUTER JOIN foos USING (id)
WHERE foos.id IS NULL;

Men det här skalar inte särskilt bra, eftersom du kanske har många värden istället för bara sex. Det kan bli tröttsamt att skapa en lång lista med en UNION behövs per värde.

En annan lösning är att ha en allmän tabell med tio siffror till hands och använda den upprepade gånger för flera ändamål.

CREATE TABLE num (i int);
INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

SELECT n.id
FROM 
  (SELECT n1.i + n10.i*10 AS id
   FROM num AS n1 CROSS JOIN num AS n10
   WHERE n1.i + n10.i*10 IN (2, 3, 4, 5, 6, 7)) AS n
  LEFT OUTER JOIN foos USING (id)
WHERE foos.id IS NULL;

Jag visar den inre frågan som genererar värden från 0..99 även om detta inte är nödvändigt i det här fallet. Men du kan ha värden större än 10 i din lista. Poängen är att med en tabell num , kan du generera stora antal utan att behöva ta till mycket långa kedjor med en UNION per värde. Du kan också ange listan med önskade värden på ett ställe, vilket är mer bekvämt och läsbart.



  1. Infoga Blobs i MySql-databaser med php

  2. Visa SQLite-frågeresultat med vertikal utdata

  3. MySQL användarbehörigheter

  4. Förstå vyer i SQL