MySQL comment supprimer les enregistrements d'une table qui se trouvent dans une autre table
-
06-07-2019 - |
Question
J'ai la table A avec près de 15 000 entrées. J'ai une deuxième table B avec 7900 entrées avec un champ commun avec la table A.
Je dois extraire dans une troisième tableC temporaire toutes les entrées de la table A, à l'exception de celles qui figurent également dans la table B. Aussi simple que cela puisse paraître, je n'ai pas trouvé le moyen de le faire. Le plus proche que j'ai eu était ceci:
INSERT INTO tableC
SELECT *
FROM tableA
INNER JOIN tableB
ON tableA.field IS NOT tableB.field
Ce SQL sélectionne simplement tout ce qui se trouve dans la tableA, même les entrées qui se trouvent dans la table B.
Des idées pour lesquelles je me trompe?
La solution
Et si vous essayiez ceci?
INSERT INTO tableC
SELECT *
FROM tableA
WHERE tableA.field NOT IN (SELECT tableB.field FROM tableB)
Ou vous pouvez essayer la syntaxe alternative EXISTS
INSERT INTO tableC
SELECT *
FROM tableA
WHERE NOT EXISTS (SELECT * FROM tableB WHERE tableB.field = tableA.field)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow