简单来说问题,第1个必须保持连接到记录最新的第2个表。所以,我使用函数MAX()
的方法目前我有2张桌子。
匹配
matches_payments
现在我想在matches_payments
期望的结果
但由于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;
而未产生所需结果
使用此功能时,每个组中的所有行应与GROUP BY部分中省略的列具有相同的值。服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。 来自MySQL Dev
PS :我知道桌子的设计很差。这不是我的工作,因为最后一位开发人员做了那些。
答案 0 :(得分:1)
你需要两个连接。您需要matches_payments
表的自联接才能获得每个match_id
的ID最高的行,如SQL Select only rows with Max Value on a Column所示。然后你LEFT JOIN
将这个matches
组合成两个表:
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