MySQL:如何只选择那些从未在列中具有特定值的托管?

时间:2016-12-06 09:23:51

标签: mysql

我目前使用这样的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

4 个答案:

答案 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'
    );

LIVE DEMO SQL

答案 3 :(得分:0)

此外,您可以使用not existsdistinct来执行此操作:

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