2011-07-08 2 views
1

J'ai deux tables.Rejeter la ligne de select si la condition existe dans une autre table

  1. les contacts Tables - contact_id, contact_email, contact_name, etc
  2. Opt out Table - contact_email, la portée de leur opt-out (événement, société)

donc un contact ont peut-être plusieurs événements opting outs, mais ce qui me tient vraiment à coeur, c'est qu'ils ont un large choix d'exclusion.

Comment puis-je joindre les données de sorte que si un contact a une correspondance avec une ligne de la table optout qui a une portée de "société", il n'apparaîtra pas dans le résultat?

Répondre

2
SELECT c.* 
    FROM Contacts c 
    WHERE NOT EXISTS(SELECT NULL 
         FROM OptOut o 
         WHERE c.contact_email = o.contact_email 
          AND o.scope = 'company') 

Cela pourrait aussi être fait avec un LEFT JOIN:

SELECT c.* 
    FROM Contacts c 
     LEFT JOIN OptOut o 
      ON c.contact_email = o.contact_email 
       AND o.scope = 'company' 
    WHERE o.contact_email IS NULL 
1

select * de contacts où contact_email pas (SELECT contact_email de optout où scope = 'société');

Questions connexes