MySQL - 左连接顺序被忽略

MySQL - Left join order being ignored

我正在尝试通过它的主键 DESC 对连接 table 进行排序,然后仅提取该记录以添加到数据集。

结构

ws_results

ws_map

查询

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

以上returns:

但这是不正确的,因为如果我 运行 子查询在它自己的查询中,就像这样:

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) 但这似乎也不适用于我的情况。

我已经在评论部分解释了为什么你的查询不起作用。您依赖多余的 ORDER BY 并且错误地使用了 GROUP BY

这是一种实现您想要的方法:为每个结果记录获取最匹配的地图记录(具有最高 dataID 的地图记录)。

Select 每个 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;