2013-01-24 4 views
0

Si je fais la requête suivante:
select * from tabla where codigo in (33,34,55,10,22,50);
msyql me montre les enregistrements qui correspondent à la requête.Comment afficher les enregistrements qui n'existent pas dans mysql?

Mais que faire si je veux savoir quels enregistrements de cette requête (33,34,55,10,22,50) qui ne sont pas dans la base de données?
Y at-il un moyen de le savoir sans avoir à comparer un enregistrement par moi-même? Excusez-moi, je ne l'explique pas bien. Cela me montre les enregistrements qui sont dans la base de données, mais ne correspondent pas à la requête. Je veux savoir ce que de ces dossiers (33,34,55,10,22,50) ne sont pas dans la base de données.

Répondre

2

Utilisation NOT:

select * from tabla where codigo NOT in (33,34,55,10,22,50); 

MISE À JOUR

À la lumière de cette nouvelle explication, faites ceci:

SELECT n.id 
FROM 
    (SELECT 33 AS codigo 
    UNION SELECT 34 
    UNION SELECT 55 
    UNION SELECT 10 
    UNION SELECT 22 
    UNION SELECT 50) AS n 
LEFT JOIN tabla USING (codigo) 
WHERE tabla.codigo IS NULL; 

Malheureusement, MySQL (et bien d'autres systèmes) ne le font pas donne un moyen simple d'utiliser une liste arbitraire de nombres qui ne sont pas déjà dans une table. Si vous devez le faire dynamiquement, je suggérerais d'ajouter ces nombres à une table temporaire à la place d'un lot codé en dur des UNIONs. Ou générer une table de nombres réutilisables (je trouve cela assez utile), et utiliser les valeurs à partir de là. Par exemple:

SELECT nt.id 
FROM numbers_table nt 
LEFT JOIN tabla ON nt.id = tabla.codigo 
WHERE nt.id IN (33,34,55,10,22,50) 
    AND tabla.codigo IS NULL 
+0

Excusez-moi, je din't bien l'expliquer. Cela me montre les enregistrements qui sont dans la base de données, mais ne correspondent pas à la requête. Je veux savoir ce que de ces dossiers (33,34,55,10,22,50) ne sont pas dans la base de données. – adrian4aes

+0

@ adrian4aes: Je vois, mis à jour – PinnyM

2

pour cette solution

set @suggest_value:=10; // <---10 is the lowest value 
select codigo, 
@suggest_value:[email protected]_value+1, 
if([email protected]_value, 0, 1) as missing_value 
from tabla 
Questions connexes