2016-11-21 1 views
1

Ich habe einen Blackout - Ich habe die folgende Tabellenstruktur:SQL - Ermitteln, ob Bestellungen eines Benutzers mit einer bestimmten E-Mail existiert?

s_order: 
userID | .... 

s_user: 
id | email | ... 

ich jetzt eine Schleife durch alle meine Befehle und die Benutzer-ID des Kunden lesen kann. Ich möchte nun prüfen, ob es weitere Bestellungen dieses Kunden gibt, die nicht durch seine ID, sondern durch seine E-Mail-Adresse identifiziert werden (aufgrund der Migration kann dies passieren).

Es kann sein, dass in der S_USER Tabelle I folgende Daten hat:

s_user: 
id | email | ... 
1 | [email protected] 
2 | [email protected] 

Kann jemand helfen? Vielen Dank!

+1

hinzufügen mehr Probentabellendaten, und das erwartete Ergebnis. – jarlh

+0

2 Benutzer können die gleiche E-Mail haben? –

+1

"wegen der Migration kann dies passieren" - es sollte nicht in erster Linie passieren –

Antwort

2

Dies ist eine Methode:

select u.*, 
     (case when exists (select 1 
          from s_order o2 join 
           s_user u2 
           on o2.user_id = u2.id 
          where u2.email = u.email and u2.id <> u.id 
         ) 
       then 'Yes' else 'No' 
     end) as HasDuplicate 
from s_user u; 

Allerdings könnte es ausreichend sein, nur um zu sehen, wenn mehrere Benutzer die gleiche E-Mail haben. Wenn ja, ist dies der einfachste Weg:

select u.email, group_concat(u.id) as userid 
from s_user u 
group by u.email 
having count(*) > 1; 

Sie könnten dies begrenzen nur für Benutzer mit dem Befehl:

select u.email, group_concat(u.id) as userid 
from s_user u 
where u.id in (select o.user_id from s_order) 
group by u.email 
having count(*) > 1; 
Verwandte Themen