2016-04-05 12 views
2

Ich habe Schwierigkeiten, mich um MySQL Joins zu bekommen. Ich habe drei TabellenMySQL: Finden Sie Zeilen in der einen Tabelle und nicht die andere, finden Sie beide

-- events 
id name 
1 Event 1 
2 Event 2 

-- registrations 
id event name 
1 1  Alice 
2 1  Bob 
3 2  Alice 
4 2  Charlie 

-- scores 
id event name  score 
1 1  Alice 10 
2 1  Charlie 20 
3 2  Alice 15 
4 2  Bob  30 

Für jedes Ereignis Ich versuche

  • um herauszufinden, wie viele Menschen registriert (Zeilen in Registrierungstabelle), nicht aber eine Punktzahl (schließen Reihen in Partituren Tabelle) erhalten hat
  • Wie viele Menschen hat einen neuen Score (Zeilen in der Tabelle Partituren), aber registrieren nicht (ausschließen Zeilen in Registrierungstabelle)
  • Wie viele Menschen, die beide registrierte und bekam eine Punktzahl

Ich habe verschiedene Varianten ausprobiert von

SELECT * 
FROM registrations r 
LEFT JOIN scores s 
ON  r.event = s.event 
WHERE s.event IS NULL 
AND r.event = 1 

aber ich bin nicht sicher, was soll ich auf beitreten: event oder name aber weder sind null und ich scheine nie, dass ich die richtigen Zahlen zu erhalten freu zum. Das Ergebnis am Ende sollte wie sein

 name  reg_only score_only reg&score total 
event Event 1 1  1   1   3 
+0

Sie versucht haben, um die Tabelle zu Ihrer * Erklärung hinzu? "select r. * from registrations r ....." Das Problem könnte sein, dass die Ereignisspalte in mehreren beteiligten Tabellen vorhanden ist. – Henkealg

Antwort

0

Sie unter 3 Abfragen in derselben Reihenfolge verwenden können, wie Sie in Ihrem query- erwähnt

SELECT e.id, e.name, COUNT(r.id) AS registered_user 
FROM `events` AS e 
INNER JOIN registrations AS r ON e.id=r.event 
LEFT JOIN scores AS s ON e.id = s.event 
WHERE s.event IS NULL; 

SELECT e.id, e.name, COUNT(r.id) AS scored_user 
FROM `events`scores AS e 
INNER JOIN scores AS s ON e.id=s.event 
LEFT JOIN registrations AS r ON e.id = r.event 
WHERE r.event IS NULL; 

SELECT e.id, e.name, COUNT(*) AS both_user 
FROM `events` AS e 
INNER JOIN registrations AS r ON e.id=r.event 
INNER JOIN scores AS s ON e.id = s.event; 
Verwandte Themen