[SQL] Element pas dans le IN

WRInaute passionné
Bonjour,

En 1 seule requête, comment trouver l'id de la table qui n'est pas dans un tableau IN entrée ?

Exemple.

Code:
SELECT *  FROM table WHERE id IN (1, 2, 3, 4, 5);

Si 3 n'existe pas dans la base je veux le savoir.
En revanche, je ne veux pas récupérer tous les éléments de la table 6,7,8,9,10..

Merci
 
WRInaute accro
Avec postgresql (et probalement d'autres, vu que ce serait du SQL standard):

select * from (values (1),(2),(3)) x(y) where x.y not in (select id from table);

La version "longue" qui marche avec mysql:

select * from (select 1 as y union select 2 union select 3) x where x.y not in (select id from table);

Il y a peut-être plus court, mais je n'ai pas trouvé.

Jacques.
 
WRInaute passionné
J'ai tenté ça sous MySQL en suivant à la lettre ta syntaxe mais sans succès. As-tu une idée ?

Code:
SELECT * FROM (values (1), (2), (3)) x(y) WHERE x.y NOT IN (SELECT `use_id` from user)

C'est OK pour la deuxième forme qui m'intéresse malheureusement moins.

Merci
 
WRInaute accro
Ben non, comme je disais, j'ai cherché, et je n'ai rien trouvé. Mais à part le fait que c'est plus long, quel est le problème avec la deuxième syntaxe?

L'autre option consiste à utiliser une table temporaire:
create temporary table tmpxxx (id integer); insert into tmpxxx values (1),(2),(3); select * from tmpxxx where id not in (select id from table)

Jacques.
 
WRInaute passionné
Merci ça va le faire.

Je me demandais juste s'il n'y avait pas une autre façon d'écrire
Code:
select 1 as y union select 2 union select 3

En supprimant les "union", en fournissant une liste à virgule ou autre.
Ca semble lourd à l'oeil et niveau performance.
 
Discussions similaires
Haut