必要な結果が得られないのに、サブクエリで結合しようとしています。誰かが実行するためのより良いクエリを提案することができますか、またはおそらく私はサブクエリを使用するべきではありません(私は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
これをAに変更するJOIN
とLEFT JOIN
、クエリからより多くの結果が返されますが、最初のを除くすべての行の、、t.delay1
およびt.delay2
のt.delay3
3つの列に「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