2010-11-20 9 views
1

Ich habe zwei TabellenMySQL Query Single Item und Neueste Verknüpfung mit

table1: { id, name } 
table2: { id, table1_id, time_added } 

Es ist möglich, erhält alle Elemente in Tabelle 1 nur mit dem zuletzt hinzugefügten entsprechenden Punkt in Tabelle 2 in einer einzigen Abfrage zu bekommen?

+0

Was meinst du mit „den letzten in verwandten Artikeln hinzugefügt Tabelle 2“? Diese beiden Tabellen haben nichts gemeinsam, daher können wir UNION nicht verwenden und ich verstehe nicht ganz, was Sie aus Tabelle 2 auswählen möchten. –

Antwort

2

Dies funktioniert:

SELECT 
    t1.*, 
    t2.* 
FROM Table1 t1 
INNER JOIN table2 t2 on t2.table1_id = t1.id 
INNER JOIN (SELECT Max(time_added) as time_added, table1_id FROM Table2 Group by table1_id) t2a on 
    t2a.time_added = t2.time_added AND t2a.table1_id = t2.table1_id 
+1

Die Unterabfrage gibt die maximale time_added und eine zufällige Tabelle1_id zurück, ich bin nicht sicher, ob Sie das sind möchte tun. Plus, das würde nicht notwendigerweise alle Elemente in Tabelle 1 auswählen, da es ein innerer Join ist, vielleicht suchen Sie nach einem äußeren Join (aber um ehrlich zu sein, ich habe nicht ganz verstanden, was OP machen wollte). Bearbeiten: Eigentlich würde dies nur eine Zeile aufgrund Ihrer zweiten Verknüpfung auswählen, da nur eine Zeile max die Bedingung erfüllen kann. –

+1

@Vincent Savard @Kirk ... yeah Ich hatte die Abfrage ein wenig vermasselt ... aber das funktioniert .. und kein Outer Join ist nicht notwendig. –

+1

Ah, du hast recht, ich habe die Frage (noch einmal) falsch gelesen. –

0

SELECT table1.id, table1.name FROM Tabelle1 JOIN Tabelle2 ON table1.id = table2.id GROUP BY table2.id ORDER BY time_added DESC;

Das ist Ihre Antwort, lassen Sie mich wissen, wenn Sie Klärung benötigen.

+0

@ ajacian81 ... OP möchte Folgendes: "Alle Elemente in Tabelle1 mit nur dem zuletzt hinzugefügten verwandten Element in Tabelle2 abrufen". Ihre Abfrage gibt nichts aus table2 zurück und gibt Duplikate aus table1 zurück. Das ist einfach nicht richtig! –

+0

John: Die Annahme hier ist, dass die ID auf Tabelle1 und Tabelle2 identisch sind. – ajacian81

0

es ist sehr einfach, jene Artikel auszuwählen, die zuletzt in table2 hinzugefügt werden.

HINWEIS: In der obigen Abfrage muss die ID von table1 und die ID von table2 AUTO INCREMENTED sein.

Versuchen Sie diese Abfrage oben.

Danke!

0

Mit dieser Lösung Sie Subqueries nicht braucht ... auf ajacian81 basierend

SELECT table1.*, table2.* 
FROM table1 LEFT JOIN table2 
    ON table1.id = table2.table1_id 
GROUP BY table1.id 
ORDER BY table2.time_added DESC;