【发布时间】:2013-03-12 17:18:08
【问题描述】:
我正在尝试对子查询进行连接,尽管我无法获得所需的结果。有人可以建议运行更好的查询还是我不应该使用子查询(我不精通 SQL 的任何变体),是否有更好的查询类型可以运行?
根据我有限的 SQL 知识,我可以看到子查询不是最佳位置。这里的目标是从 tblResults 中查询字段,并将它们连接到 tblTraceOutput 中具有相同 resultid 的最后一行(tblTraceOutput 中有多行具有相同的 resultid 值,所以只有最后一行)。
SELECT r.`resultid`, r.`successful`, r.`result`, r.`testdate`, r.`changed`,
t.`delay1`, t.`delay2`, t.`delay3`
FROM `tblResults` AS r
JOIN (
SELECT `resultid`, `delay1`, `delay2`, `delay3`
FROM `tblTraceOutput`
WHERE `traceid`='48'
ORDER BY `outputid` DESC LIMIT 0,1
) AS t ON (t.`resultid` = r.`resultid`)
WHERE r.`traceid` = '48' ORDER BY r.`resultid` DESC LIMIT 0,20
如果我将 JOIN 更改为 LEFT JOIN,我将从我的查询中获得更多结果,但在 t.delay1、t.delay2 和 t.delay3 的三列中写入“NULL”,除了第一行之外的每一行。从子查询中提取的结果仅与 tblResults 上主查询的第一行输出联合。 我怎样才能让这个子查询运行并联合外部查询中的每一行输出?
在我的脑海中,我想到了以下内容,但我无法以任何方式使其工作:
SELECT r.`resultid`, r.`successful`, r.`result`, r.`testdate`, r.`changed`
FROM `tblResults` AS r
(
SELECT t.`resultid`, t.`delay1`, t.`delay2`, t.`delay3`
FROM `tblTraceOutput`
WHERE `traceid`='48'
ORDER BY `outputid` DESC LIMIT 0,1
) AS t
JOIN ON (t.`resultid` = r.`resultid`)
WHERE r.`traceid` = '48' ORDER BY r.`resultid` DESC LIMIT 0,20
【问题讨论】:
标签: mysql sql join greatest-n-per-group