2016-08-05 21 views
0

MySQLMySQL, wie Kunden abfragen, aber überspringen, wenn Vorname und Nachname übereinstimmen

Stellen Sie sich eine Prepaid-Karte ausstellende Firma vor.

Ein Benutzer konnte sich viele Male anmelden.

Ein Benutzer kann viele Karten haben.

CREATE TABLE users ( 
    id int primary key, 
    govid varchar(255), 
    firstname varchar(255), 
    lastname varchar(255), 
    address varchar(255) 
); 

CREATE TABLE card (
    id int primary key, 
    cardnumber varchar(16), 
    balance int, 
    user_id integer 
); 

Möchten Sie eine Liste der Benutzer, dass
1.
2. haben mehr als 10 Karten
3. nur, wenn Vor- und Nachnamen passen nicht

Mein Versuch, die gleiche govid haben :

select u.govid, count(*) 
from card c 
join users u on u.id=c.user_id 
/*join users u2 on u2.id=u.id and u2.firstname<>u.firstname and u2.lastname<>u.lastname ?*/ 
group by u.govid 
having count(*)>10 

Ich kann nicht herausfinden, wie man Anforderung # 3 einführt?

+0

Haben Sie 'where..vorname! = U.lastname' vor der' group by' -Klausel hinzugefügt? – sgeddes

+0

Ja, ich habe in dem obigen Versuch, es war in Kommentaren, war mir nicht sicher, ob das korrekt ist – davidjhp

Antwort

0

Verbinden Sie die Originaltabelle mit den Benutzern, die mehr als 10 Karten haben, und prüfen Sie den Vor- und Nachnamen.

select u1.govid,u1.firstname,u1.lastname,u2.firstname,u2.lastname 
from users u1 
join (select * from users 
     where govid in (select u.govid 
         from users u 
         join card c on u.id=c.user_id 
         group by u.govid 
         having count(*)>10 
        ) 
    ) u2 on u1.govid = u2.govid 
where u2.firstname<>u1.firstname and u2.lastname<>u1.lastname