我目前使用这样的MySQL查询:
SELECT
testcase.foreignID, testcaseexecution.Result
FROM
mydb.testcaseexecution
INNER JOIN mydb.testcase ON testcaseexecution.Testcase_idTestcase = testcase.idTestcase
我想要做的只是显示testcaseexecution.Result从未出现过的那些foreignID' OK'此外,每个 foreignID 只显示一次。
我使用 DISTINCT 进行了修改,但没有让它工作,请帮忙。
示例:
foreignID Result
--------------------
1 NOK
1 wait for test
2 OK
2 NOK
3 NOK
这应该产生结果:
foreignID
----------
1
3
答案 0 :(得分:1)
您可以在foreignID
列上使用聚合,并检查是否存在OK结果:
SELECT t2.foreignID
FROM mydb.testcaseexecution t1
INNER JOIN mydb.testcase t2
ON t1.Testcase_idTestcase = t2.idTestcase
GROUP BY t2.foreignID
HAVING SUM(CASE WHEN t1.Result = 'OK' THEN 1 ELSE 0 END) = 0
答案 1 :(得分:1)
DISTINCT
是一个很好的方向,如果您只想获取ID列表,您可能需要根据您的使用案例和业务要求将其更改为GROUP BY
。
如果foreignID在测试用例表中是PK或唯一的,则您不需要DISTINCT
关键字。
SELECT DISTINCT /* Get a distinct list */
TC.foreignID
FROM
mydb.testcase TC
WHERE
/* Exclude everything which ever had a corresponding record with Result = 'OK' */
NOT EXISTS (
SELECT * FROM mydb.testcaseexecution TCE
WHERE TC.idTestcase = Testcase_idTestcase
AND TCE.Result = 'OK'
)
答案 2 :(得分:1)
试试这个。希望它应该工作正常。
SELECT DISTINCT
foreignID
FROM
testcaseexecution
WHERE
foreignID NOT IN (
SELECT DISTINCT
foreignID
FROM
testcaseexecution
WHERE
Result = 'OK'
);
答案 3 :(得分:0)
此外,您可以使用not exists
和distinct
来执行此操作:
SELECT DISTINCT
foreignID
FROM
testcase t1
WHERE
NOT EXISTS (
SELECT
1
FROM
testcaseexecution t2
WHERE
t1.idTestcase = t2.Testcase_idTestcase
AND t2.Result = 'OK'
);
<德尔> SQLFiddle Demo 德尔>