gpt4 book ai didi

MySQL - 左连接顺序被忽略

转载 作者:行者123 更新时间:2023-11-29 10:44:51 24 4
gpt4 key购买 nike

我尝试通过连接表的主键 DESC 对连接表进行排序,并仅提取该记录以添加到数据集。

结构

ws_结果

  • 结果 ID (P)
  • 结果日期时间
  • 结果服务器
  • 结果优胜者

ws_map

  • 数据 ID (p)
  • resultID(通过 ID 链接到结果表)
  • controlVS
  • 控制NC
  • 控制TR

查询

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

以上返回: enter image description here

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

SELECT
dataID,
resultID,
controlVS AS vs,
controlNC AS nc,
controlTR as tr
FROM ws_map
WHERE resultID = 38538
ORDER BY dataID DESC
LIMIT 1

enter image description here

结果不匹配,请注意第一组结果中的 dataID 不正确,即使它们都是有序的并且具有相同的条件。

我已经尝试了使用 ORDER BY map.dataID DESC 的所有方法,但似乎不起作用。我还在这里查看了答案:LEFT JOIN order and limit使用 ON map.dataID = (SUBQUERY) 但这似乎也不适合我的情况。

最佳答案

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

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

选择每个 resultID 的最大 dataID 并使用它来访问相应的记录。

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;

关于MySQL - 左连接顺序被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44785816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com