web-dev-qa-db-fra.com

Requête SQL pour trouver les lignes manquantes entre deux tables liées

J'ai deux tables:

Tableau A

  • Identifiant
  • ABC_ID
  • VAL

Tableau B

  • Identifiant
  • ABC_ID
  • VAL

Ces deux tableaux sont directement liés l'un à l'autre via le ABC_ID colonne.

Je veux trouver toutes les valeurs de colonne VAL dans le tableau A qui sont pas présentes dans le tableau B pour le même ABC_ID.

28
Fazal
SELECT A.ABC_ID, A.VAL WHERE NOT EXISTS 
   (SELECT * FROM B WHERE B.ABC_ID = A.ABC_ID AND B.VAL = A.VAL)

ou

SELECT A.ABC_ID, A.VAL WHERE VAL NOT IN 
    (SELECT VAL FROM B WHERE B.ABC_ID = A.ABC_ID)

ou

SELECT A.ABC_ID, A.VAL LEFT OUTER JOIN B 
    ON A.ABC_ID = B.ABC_ID AND A.VAL = B.VAL WHERE B.VAL IS NULL

Veuillez noter que ces requêtes ne nécessitent pas que ABC_ID soit dans la table B du tout. Je pense que ça fait ce que tu veux.

47
Larry Lustig