2017-03-04 242 views
0

我想從用戶表&他從我connection_history表相關的最後一個記錄的所有數據,這是當我別在我的查詢的末尾添加工作只LEFT JOIN SQL查詢

ORDER BY contributions DESC 

(當我添加它,我只有記錄至極來自用戶,而不是最後的connection_history記錄)

我的問題是:我怎麼能得到通過捐助DESC下令entires數據

SELECT * FROM users LEFT JOIN connections_history ch ON users.id = ch.guid 
    AND EXISTS (SELECT 1 
     FROM connections_history ch1 
      WHERE ch.guid = ch1.guid 
       HAVING Max(ch1.date) = ch.date) 

回答

2

order by不應該影響返回的結果。它只會改變順序。你可能只是以意想不到的順序得到你想要的東西。例如,您的查詢接口可能會返回固定數量的行。更改行的順序可能會使結果集看起來不同。

我會說,我覺得=EXISTS爲此,更直觀:

SELECT * 
FROM users u LEFT JOIN 
    connections_history ch 
    ON u.id = ch.guid AND 
     ch.date = (SELECT Max(ch1.date) 
        FROM connections_history ch1 
        WHERE ch.guid = ch1.guid 
       ) 
ORDER BY contributions DESC; 

的原因是=是直接在ON子句中,所以很清楚什麼關係表是。

+0

Thx它的工作很好!只需通過捐款改變連接:)! – LeSpotted44

0

爲了您的偶然考慮,不同格式的原始代碼。尤其要注意的是,縮進AND表明該子句是LEFT JOIN的一部分,它是。

SELECT * FROM users 
LEFT JOIN connections_history ch ON 
    users.id = ch.guid 
    AND EXISTS (SELECT 1 
       FROM connections_history ch1 
       WHERE ch.guid = ch1.guid 
       HAVING Max(ch1.date) = ch.date 
      ) 
0

我們可以使用嵌套查詢首先檢查MAX_DATE給定用戶,並通過的GUID來嵌套查詢假設所有用戶已經在連接歷史表中的至少一個記錄,否則,你可以使用左邊的列表改爲加入。

select B.*,X.* from users B JOIN (
select A.* from connection_history A 
where A.guid = B.guid and A.date = (
select max(date) from connection_history where guid = B.guid))X on 
X.guid = B.guid 
order by B.contributions DESC;