SELECT ONLY ONE ROW FROM JOINED TABLE

Ha egy join-olt táblából csak egy sorra van szükségünk, akkor erre lesz szükségünk!


Több megoldást is felvázoltam, a példa egy fórumból az utolsó hozzászólást listázza ki felhasználónként.

MSSQL és MySQL


SELECT UserName, Posts.PostContent FROM Users
INNER JOIN Posts ON Posts.ID = (SELECT MAX(ID) FROM Posts WHERE UserID = Users.ID);

Egy kevésbé elegáns megoldás, de mysql alatt gyorsabb mint az első:

SELECT UserName, Posts.PostContent FROM Posts
INNER JOIN (SELECT MAX(ID) AS MAXID FROM Posts GROUP BY UserID) AS P ON P.MAXID = Posts.ID
INNER JOIN Users ON Users.ID = Posts.UserID;

MSSQL

MSSQL 2005-től használhatjuk a CROSS APPLY-t:

SELECT UserName, P.PostContent FROM Users
CROSS APPLY (SELECT TOP 1 PostContent FROM Posts WHERE UserID = Users.ID ORDER BY ID DESC) AS P
Facebook Comments