web-dev-qa-db-fra.com

Supprimer la ligne de la table où la correspondance existe dans la deuxième table

J'ai la table A avec les valeurs suivantes:

     
 + ------ + ------ + 
 | ID1 | ID2 | 
 + ------ + ------ + 
 | 1689 | 1709 | 
 | 1709 | 1689 | 
 | 1782 | 1709 | 
 | 1911 | 1247 | 
 | 1247 | 1468 | 
 | 1641 | 1468 | 
 | 1316 | 1304 | 
 | 1501 | 1934 | 
 | 1934 | 1501 | 
 | 1025 | 1101 | 
 + ------ + ------ + 

et une autre relation (tableau B) avec les valeurs suivantes:

 + ------ + ------ + 
 | ID1 | ID2 | 
 + ------ + ------ + 
 | 1641 | 1468 | 
 | 1911 | 1247 | 
 + ------ + ------ + 

Je voudrais supprimer toutes les lignes de la table A qui apparaissent dans la table B (une correspondance exacte sur ID1 et ID2). Cela semble simple en théorie mais je n’ai aucune joie avec la déclaration EXISTS ou d’autres approches. J'utilise SQLite.

Toutes les suggestions grandement appréciées. 

15
amjo324

Que diriez-vous de: (pas trop sûr si cela fonctionne dans SQLite)

DELETE FROM TableA
WHERE EXISTS (SELECT *
              FROM TableB
              WHERE TableB.ID1 = TableA.ID1
                AND TableB.ID2 = TableA.ID2)
24
Dukeling

Dans MSSQL, vous pouvez faire ceci: (le plus efficace)

SUPPRIMER a DE a JOIN b ON a.ID1 = b.ID1 ET a.ID2 = b.ID2

0
Markus

La suppression à l'aide deEXISTEdans MS-SQL peut être réalisée comme suit:

DELETE TableA FROM TableA
WHERE EXISTS (SELECT *
              FROM TableB
              WHERE TableB.ID1 = TableA.ID1
                AND TableB.ID2 = TableA.ID2)

Je suppose seulement que cela fonctionnerait également en sqlite

0
Adge Cutler