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