【发布时间】:2017-11-30 20:01:09
【问题描述】:
我正在尝试通过其主键 DESC 对连接表进行排序,并仅提取该记录以添加到数据集中。
结构
ws_results
- 结果ID (P)
- 结果日期时间
- 结果服务器
- 结果获胜者
ws_map
- 数据ID (p)
- resultID(通过 ID 链接到结果表)
- 控制VS
- controlNC
- 控制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
但这是不正确的,因为如果我像这样在它自己的查询中运行子查询:
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 using ON map.dataID = (SUBQUERY) 但这似乎也不适用于我的情况。
【问题讨论】:
-
子查询的顺序对连接没有用..顺序是为了呈现数据连接选择数据..这两个概念是不同的
-
一张表没有顺序。派生表也是如此,即 from 子句中的子查询。您的
ORDER BY子句被忽略。无论如何,您为什么期望您的GROUP BY results.resultID会导致第一行地图?您没有指定要从地图中获取哪些值。你只会得到一个map.dataID,一个map.vs,等等,任意选择。它们甚至可以存在于不同的记录中。您的查询违反了标准,并会导致几乎所有其他 DBMS 出现错误。
标签: mysql sql join sql-order-by