Also habe ich mit Joins gespielt und versucht, den besten Weg zu finden, dies zu erreichen.PostgreSQL - Alle Zeilen aus verknüpften Tabellen einschließen
Sagen wir, ich habe diese Tabellen. Aus Gründen der Kürze nicht alle Spalten setzen. Aber Tabelle A hat mehrere Spalten als B.
Table A
---------
| id | member_id | data | updated
Dann diese Tabelle
Table B
---------
| id | post_id | member_id | post_date
Tabelle B.post_id
ist ein Fremdschlüssel zu Table A.id
Ich möchte Tabelle A und B verbinden, aber das Rück alle Reihen. Im Moment kann ich nur alle Zeilen von Tabelle A und nur übereinstimmende von Tabelle b zurückgeben. Ich brauche die Zeilen-Tabelle B, die sowohl von Tabelle A als auch von ORDER BY DESC der größten der 2 Zeitspalten abgeglichen wurde.
Hier ist die Abfrage, die ich mir die gewünschten Ergebnisse nicht bekommen mit
SELECT a.*, b.member_id as poster, b.post_date, c.title, c.level
FROM tableA as a LEFT JOIN tableC as c ON c.a_id=a.a_id
LEFT JOIN tableB as b ON a.id=b.post_id
WHERE a.member_id IN (100,101) OR b.member_id IN (100,101)
ORDER BY GREATEST(a.updated,b.post_date) DESC LIMIT 10
gespielt habe. Wenn ich eine Zeile mit ID 20 aus Tabelle A habe, die Join in Tabelle b übereinstimmt, bekomme ich nur die Zeile aus Tabelle b in den Ergebnissen und nicht beide Zeilen aus beiden Tabellen. Ich habe mit vielen Möglichkeiten gespielt und andere Antworten auf SO versucht, einfach nicht ausgearbeitet. Die Abfrage sollte mit vielen Datensätzen gut funktionieren. Wenn jemand einen besseren und leistungsfähigeren Weg hat, dies zu tun und es zum Laufen zu bringen, bitte teilen. Hier
ist Beispieldaten:
Tabelle A
id | member_id | data | updated
--- ------- --------- ---------
10 | 101 | data | 1495081193
11 | 100 | data | 1495081500
12 | 101 | data | 1495081600
Tabelle B
id post_id | member_id | post_date
--- ------- --------- ---------
2 | 10 | 101 | 1495083000
3 | 10 | 100 | 1495083500
Also, was ich für Ergebnisse zu erwarten auf dem Join ist
id post_id | member_id | data | post_date | updated
--- ------- --------- ------ --------- -------
3 | 10 | 100 | data | 1495083500 | 1495081193
2 | 10 | 101 | data | 1495083000 | 1495081193
12 | | 101 | data | | 1495081600
11 | | 100 | data | | 1495081500
10 | | 101 | data | | 1495081193
Aber ich bekomme nur th ist ohne die Spalte, die als letzte übereinstimmte.
id post_id | member_id | data | post_date | updated
--- ------- --------- ------ --------- -------
3 | 10 | 100 | data | 1495083500 | 1495081193
2 | 10 | 101 | data | 1495083000 | 1495081193
12 | | 101 | data | | 1495081600
11 | | 100 | data | | 1495081500
dass ein grobe Beispiel ist zu beachten, ich befehle von GREATEST die Zeitstempel der beiden Spalte zu verwenden.
I don versteh es nicht. Bitte zeigen Sie einige Beispieldaten für A, für B, das Ergebnis, das Sie erhalten, und das Ergebnis, das Sie erwarten. –
@ThorstenKettner Ich habe die Frage aktualisiert. –