SQL server: Holen Sie sich Zeilen mit Kunden, die noch nie online gekauft haben

Ich habe eine Tabelle TransactionData , die Transaktionsdaten für Kunden und eine andere Tabelle enthält Subscribers , die Kunden enthalten, die Newsletter-Abonnenten sind.

Dies ist, was ich tun muss: Wählen Sie alle Abonnenten aus TransactionData Tabelle, die auch in der Subscribers Tabelle sind und die noch nie Produkte online gekauft haben ( StoreID = 50001 ).

Der eindeutige Schlüssel für beide Tabellen ist die Kunden-E-Mail-Adresse.

Dies ist die grundlegende Tabellenstruktur.

Transaktionsdaten

 Email StoreID OrderID customer1@mail.com 50001 101 customer1@mail.com 50001 102 customer2@mail.com 50001 201 customer2@mail.com 51111 202 customer3@mail.com 50001 301 customer3@mail.com 50001 302 

Abonnenten

 Email customer1@mail.com customer2@mail.com 

Erwünschtes Ergebnis

 Email StoreID customer1@mail.com 51111 

Das ist meine Abfrage so weit:

 SELECT b.Email, b.BoutiqueId FROM HasNewsletterPermission2014 AS a INNER JOIN TransactionData AS b ON a.Email = b.Email WHERE b.BoutiqueId <> 50001 

Ich kann nicht herausfinden, wie man Kunden ausschließt, die noch nie online gekauft haben.

Kannst du mir dabei helfen?

Solutions Collecting From Web of "SQL server: Holen Sie sich Zeilen mit Kunden, die noch nie online gekauft haben"

Sie können IN :

 SELECT b.Email, b.BoutiqueId FROM HasNewsletterPermission2014 AS a INNER JOIN TransactionData AS b ON a.Email = b.Email WHERE b.email not in (select email from TransactionData where BoutiqueId = 50001) 

Damit können Sie alle Personen auswählen, die keine Online-Transaktion hatten.

Oder Sie können EXISTS :

 SELECT b.Email, b.BoutiqueId FROM HasNewsletterPermission2014 AS a INNER JOIN TransactionData AS b ON a.Email = b.Email WHERE not exists (select td.email from TransactionData td where b.email = td.email and td.BoutiqueId = 50001) 

Beide erreichen das gleiche Ergebnis.