0
我覺得我接近我的解決方案,但並不完全在那裏。我試圖選擇testRun.build
兩次,從另一個表中選擇具有兩個不同外鍵的同一列
首次基於當前運行(Results.build_fk
)並基於最後一次運行所在的測試通過(Results.lastPass
)。
這是迄今爲止我選擇的聲明,我覺得應該工作(because of this answer),但它告訴我「子查詢返回多於一行」。
SELECT Results.build_fk, Results.testCaseID, Results.pass, Results.time,
(SELECT testRun.build
FROM testRun
INNER JOIN Results r1 ON r1.build_fk = testRun.runID
) AS Last_build,
(SELECT testRun.build
FROM testRun
INNER JOIN Results r2 ON r2.lastPass = testRun.runID
)
AS Current_Build
FROM Results
INNER JOIN testCases AS t1 ON t1.testCaseID = Results.testCaseID
ORDER BY build_fk DESC, testCaseID ASC;
這裏是樣本表,樣本數據:
Results
(`build_fk`, `testCaseID`, `pass`, `time`, `lastPass`)
(1132, 200, 0, {some timestamp}, 1132)
(1133, 200, 0, {some timestamp}, 1132)
(1134, 200, 1, {some timestamp}, 1134)
(1132, 210, 0, {some timestamp}, 1132)
(1133, 210, 0, {some timestamp}, 1132)
(1134, 210, 1, {some timestamp}, 1134)
testRun
(`runID`, `build`)
(1132, 'build-1.0')
(1133, 'build-1.1')
(1134, 'build-1.2')
對不起世界上沒有SQLFiddle,我不能讓它正確地創建表。
相關的子查詢需要有一個'WHERE'子句與主查詢中的表連接。否則,它們將返回所有結果的行,與主SELECT中的行不同。 – Barmar
你可以在你連接的答案中看到。 – Barmar