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`;
Und die IDs sind immer sequentiell (inkrementell und ohne Lücken)? – Strawberry
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
Warum erscheint argID 1 zweimal in der Ergebnismenge? – Strawberry