2017-05-15 2 views
0

Um eine Frage stellen immer die simplier lassen vermuten wir zwei Tabellen mit wenigen Spalten haben und eine Eins-zu-viele-Beziehung ...Kombinieren JOIN mit „Kind“ Reihen

  1. first mit Feldern id, some_field und second_id .
  2. second mit Feldern id, parent_id

Zuerst ich

SELECT first.id, first.some_field, second.id, second.parent_id 
FROM first INNER JOIN second ON first.second_id = second.id 
WHERE some_field="some_val" 

Aber danach muss ich first.id, bekommen first.some_field, second.id aus der Verbindung von zwei Tabellen, in denen parent_id unter den Werten in jeweiligen Spalte des Ergebnisses der obigen Abfrage.

Ist das mit einer Abfrage möglich? Oder (auf PHP-Seite) muss ich Spalte in Ergebnismenge nehmen und etwas wie folgt tun?

SELECT first.id, first.some_field, second.id, second.parent_id 
FROM first INNER JOIN second ON first.second_id = second.id 
WHERE parent_id IN (<many_ids_here>) 
+0

Dies wird als eine hierarchische Abfrage oder einer rekursiven Abfrage durchgeführt. Leider unterstützt mySQL diese Konzepte nicht. Es gibt eine Arbeit mit globalen Variablen: http://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query oder Sie müssen Joins zwischen Tabellen für die Anzahl der Ebenen Sie wiederholen möchte unterstützen. – xQbert

Antwort

1

Sie können eine verschachtelte Abfrage, wie folgt erstellen:

SELECT first.id, first.some_field, second.id, second.parent_id 
FROM first INNER JOIN second ON first.second_id = second.id 
WHERE parent_id IN (SELECT DISTINCT second.parent_id FROM first INNER JOIN second ON first.second_id = second.id WHERE some_field="some_val") 
+0

das ist nicht schlecht Rat und was, wenn ich Daten von der ersten Abfrage mit Daten von diesem vereinigt benötigen? Gibt es etwas Besseres als 'UNION' zu tun? – Eugeny89

+1

Jetzt kaufen! Alles was ich brauche ist nur ein "OR" – Eugeny89

Verwandte Themen