我試圖在子查詢上創建聯接,雖然我無法獲得我需要的結果。有人可以建議更好的查詢來運行,或者我不應該使用子查詢(我不熟悉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