2016-06-09 7 views
1

Ein Beispiel, das Problem zu veranschaulichen:MySQL: Kombinieren der Werte von zwei verschiedenen Spalten von zwei zugeordneten Zeilen jeweils

ID: The primary key. 

argID: A foreign key pointing to another table. 

dependentID: A foreign key pointing to the field ID of the table itself. 

dependentArgID: A foreign key pointing to the same table as argID. 

I zwei zugehörigen Reihen verbinden wollen (die gleiche dependentID aufweisen) in eine Ergebniszeile bzw. immer die Auswahl der Zeitpunkt der ersten und der Nummer der nächsten Reihe:

ID argID dependentID dependentArgID date  number 
1 1  2   2    2016-06-06 null 
2 2  2   null   null  1 
3 1  4   2    2016-06-07 null 
4 2  4   null   null  2 
... 

Gewünschtes Ergebnis:

argID date  dependentArgID number 
1  2016-06-06 2    1 
1  2016-06-07 2    2 
... 

Problem in Kurzform: Um Zeilen mit denselben dependentID soll mit den date und den number (und gegebenenfalls die argID und den dependentArgID) diesen Zeilen „fusioniert“ in eine Zeile werden.

Was ich versucht, ist ein sich selbst zu verbinden, aber ich weiß nicht die richtigen Zeilen gruppiert erhalten:

nicht richtig funktioniert (und ohne die zusätzlichen Ergebnisfelder):

SELECT `b`.`date`, `a`.`number` 
FROM `table` `a` LEFT JOIN `table` `b` ON `a`.`argID` = `b`.`dependentArgID` 
WHERE `a`.`argID` = 2 
GROUP BY `a`.`dependentID`; 
+0

Und die IDs sind immer sequentiell (inkrementell und ohne Lücken)? – Strawberry

+0

Darauf können Sie nicht zählen. Die Lösung muss unabhängig von einer beliebigen Anzahl von ID-Folgen sein. Die ID ist ein Autoinkrement-Wert, der Lücken erzeugen kann. – lsblsb

+0

Warum erscheint argID 1 zweimal in der Ergebnismenge? – Strawberry

Antwort

0

Der erste Versuch (siehe mein Beitrag) zeigte in die richtige Richtung.

Die richtige Lösung ist:

SELECT `b`.`argID`, `b`.`date`, `b`.`dependentArgID`, `a`.`number` 
FROM `table` `a` 
CROSS JOIN `table` `b` 
ON `a`.`ID` = `b`.`dependentID` 
WHERE `a`.`argID` = 2 AND `b`.`date` IS NOT NULL 
GROUP BY `a`.`dependentID`; 

Dank an alle Helfer für die Hirnstimulation.

+0

Sie verlassen sich auf die ID in Ihrer Antwort (was ist nicht was ich will). und Sie verwenden eine Unterabfrage. Was effizienter ist, muss verifiziert werden. – lsblsb

Verwandte Themen