我试图在子查询上创建联接,虽然我无法获得我需要的结果。有人可以建议更好的查询来运行,或者我不应该使用子查询(我不熟悉SQL的任何变体),有没有更好的查询类型来运行?MySQL在子查询上加入
我可以看到我有限的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
非常好,谢谢先生。你今天教了我一些新东西。我已经能够对自己的需求做出微小的改变,而且这是完美的。我喜欢将第二张桌子加入自己的想法!谢谢:D – jwbensley 2013-03-12 17:36:21
不用客气':D'很高兴帮助。 – 2013-03-12 17:37:13