2017-02-20 59 views
-1

的問題用簡單的話來說,第一個必須與第二個表中的記錄最新的位置保持連接。所以,我使用的函數MAX()獲得最大編號爲

目前我有2個表。

匹配

enter image description here

matches_payments

enter image description here |

現在我想加入第二臺使用MAX(ID)第一個在matches_payments

期望的結果

enter image description here

但我不是因爲greatest-n-per-group問題得到想要的結果。

查詢

SELECT matches.id, mp.* 
FROM matches 
    LEFT JOIN (SELECT 
       MAX(id) AS id, 
       match_id 
       paymentStatus 
      FROM matches_payments 
      GROUP BY match_id) AS mp ON mp.id = matches.id; 

期望的結果是不會產生由於:Stackoverflow Question

使用此功能時,各組中的所有行應該有被忽略,則列相同的值來自GROUP BY部分。服務器可以自由地返回組中的任何值,所以結果是不確定的,除非所有值都相同。 從MySQL開發

PS:我知道這個表是設計不當。作爲最後一名開發人員,這不是我的工作。

+0

你能還與'MAX()'試圖發表您的'sql'代碼? – lois6b

+0

@downvoter謹慎解釋? –

+0

我沒有投票,但也許是因爲你遺漏了這樣的問題所需的MCVE? – Barmar

回答

1

您需要兩個連接。您需要matches_payments表的自聯接才能獲得每個match_id的ID最高的行,如SQL Select only rows with Max Value on a Column中所示。然後你LEFT JOINmatches兩個表結合起來:

SELECT m.*, mp.paymentStatus, mp.paymentAmount 
FROM matches AS m 
LEFT JOIN (
    SELECT mp1.* 
    FROM matches_payments AS mp1 
    JOIN (SELECT match_id, MAX(id) AS id 
      FROM matches_payments 
      GROUP BY match_id) AS mp2 
    ON mp1.match_id = mp2.match_id AND mp1.id = mp2.id 
) AS mp ON mp.match_id = m.id 
+0

感謝您花時間解釋和澄清事情:) –