Wie mache ich einen SQL JOIN, der beide Tabellen in einer einzelnen Spalte zurückgibt?SQL JOIN gibt beide Tabellen in einer einzigen Spalte zurück
Wie bekomme ich zum Beispiel für eine gegebene Gruppen-ID eine einzige Liste aller Personen, die zu dieser Gruppe gehören, plus all ihren Freunden?
Gruppen
-id
-name
groups_have_people
-groups_id
-people_id
Menschen
-id
-name
-group_id
people_have_friends
-people_id1 (references people.id)
-people_id2 (references people.id)
Zum Beispiel enthält groups_have_people
people_id
1, 2 und 3 für die Gruppe 123 und people_have_friends
enthält Aufzeichnungen 1-2
, 1-3
, 1-4
, 2-1
, 2-5
, ich sollte die folgenden Ergebnisse erhalten:
id Name
1 Mary
2 John
3 Burt
4 Jill
5 Sue
ich etwas tun kann wie folgt, aber es gibt keine einzige Liste zurück.
SELECT p1.*, p2.*
FROM people p1
INNER groups_have_people ghp ON ghp.people_id=p1.id
LEFT OUTER JOIN people_have_friends phf ON p1.id=phf.people_id1
LEFT OUTER JOIN people p2 ON p2.id=phf.people_id2
WHERE ghp.groups_id=123;
EDIT Sieht aus wie vielleicht ich nicht so zu tun, JOIN und soll wie die folgenden, etwas tun?
SELECT p.*
FROM people p
INNER groups_have_people ghp ON ghp.people_id=p.id
WHERE ghp.groups_id=123
UNION
SELECT people p1
INNER JOIN people_have_friends phf ON p1.id=phf.people_id1
INNER JOIN people p2 ON p2.id=phf.people_id2
WHERE p2.groups_id=123;
EDIT 2. mehr Probe hinzufügen Daten
Gruppen
id name
111 Green
123 Blue
222 Yello
Menschen
id Name
1 Mary
2 John
3 Burt
4 Jill
5 Sue
6 Bob
7 Wilma
groups_have_people
groups_id people_id
111 1
111 5
123 1
123 2
123 3
222 3
222 7
people_have_friends
people_id1 people_id2
1 2
1 3
1 4
2 1
2 5
4 5
5 6
EDIT 3. Was ist so etwas wie die folgenden?
SELECT DISTINCT id,
name
FROM people
WHERE id IN
(SELECT people_id
FROM groups_have_people
WHERE groups_id=123
UNION SELECT phf.people_id
FROM people_have_friends phf
INNER JOIN groups_have_people ghp ON ghp.people_id=phf.people_id
WHERE ghp.groups_id=123);
oder
SELECT DISTINCT id,
name
FROM people
INNER JOIN
(SELECT people_id
FROM groups_have_people
WHERE groups_id=123
UNION SELECT phf.people_id
FROM people_have_friends phf
INNER JOIN groups_have_people ghp ON ghp.people_id=phf.people_id
WHERE ghp.groups_id=123) x ON x.people_id=people.id;
, die sehr gut ist, können Sie Ergebnisse zu erwarten, vorausgesetzt, aber könnten Sie Daten liefern rohe Quelle dann? So können wir sehen, wo und wie diese Ergebnisse herkommen. Der beste Weg ist, von einer Geige wie dieser zu beginnen http://sqlfiddle.com/#!9/6bc438 – Alex
@Alex Ich hatte Folgendes in den ursprünglichen Beitrag aufgenommen. Ist das nicht ausreichend?Danke 'Zum Beispiel, groups_have_people enthält people_id 1, 2 und 3 für Gruppe 123, und people_have_friends enthält Datensätze 1-2, 1-3, 1-4, 2-1,2-5, ich sollte die folgenden Ergebnisse erhalten:' – user1032531
Sie haben nicht alle Tabellenmuster zur Verfügung gestellt – Alex