我尝试按其主键DESC
订购联接表,并仅提取该记录以添加到数据集中。
SELECT
results.ResultID,
results.ResultDateTime,
results.ResultServer,
results.ResultWinner,
map.resultID,
map.dataID,
map.vs,
map.nc,
map.tr
FROM ws_results AS results
LEFT JOIN (
SELECT
dataID,
resultID,
controlVS AS vs,
controlNC AS nc,
controlTR as tr
FROM ws_map
ORDER BY dataID DESC
) AS map ON map.resultID = results.ResultID
WHERE results.ResultID = 38538
GROUP BY results.resultID
但这是不正确的,因为如果我在其中运行子查询自己的查询:
SELECT
dataID,
resultID,
controlVS AS vs,
controlNC AS nc,
controlTR as tr
FROM ws_map
WHERE resultID = 38538
ORDER BY dataID DESC
LIMIT 1
结果不匹配,请注意第一组结果中的dataID
不正确,即使它们已经订购并且具有相同的标准。
我已尝试过使用ORDER BY map.dataID DESC
所做的一切,但似乎无法正常工作。我也在这里检查了答案:LEFT JOIN order and limit使用ON map.dataID = (SUBQUERY)
,但这似乎对我的情况不起作用。
答案 0 :(得分:1)
我在评论部分解释了为什么您的查询无效。您依赖的是多余的ORDER BY
而您使用GROUP BY
的方式不正确。
这是实现目标的一种方法:获得每个结果记录的最佳匹配地图记录(具有最高dataID的记录)。
选择每个resultID的最大数据ID,并使用它来访问相应的记录。
SELECT
results.resultid,
results.resultdatetime,
results.resultserver,
results.resultwinner,
map.resultid as map_resultid,
map.dataid,
map.vs,
map.nc,
map.tr
FROM ws_results AS results
LEFT JOIN
(
SELECT
resultid,
max(dataid) as dataid
FROM ws_map
GROUP BY resultid
) best ON best.resultid = results.resultid
LEFT JOIN
(
SELECT
dataid,
resultid,
controlvs as vs,
controlnc as nc,
controltr as tr
FROM ws_map
) AS map ON map.resultid = best.resultid
AND map.dataid = best.dataid
WHERE results.resultid = 38538;