MySQL - 每个值都在

标签 mysql

以下查询选择输入“完成”的所有工作单元(第 7 行的子查询)。这很好用……当只有一个输入时。我该如何更改它,以便它要求每个 输入都在子查询返回的集合中,而不仅仅是要出现的输入之一?

SELECT workunits.ID 
FROM workunits 
LEFT JOIN workunitInputs ON workunits.ID = workunitInputs.workunitID 
WHERE workunits.ID NOT IN (SELECT workunitID FROM jobworkunitassoc) 
AND ( 
    workunitInputs.inputID IN ( 
        SELECT workunitOutputs.outputID 
        FROM workunitOutputs 
        LEFT JOIN workunits ON workunitOutputs.workunitID = workunits.ID 
        LEFT JOIN jobworkunitassoc ON workunits.ID = jobworkunitassoc.workunitID 
        LEFT JOIN jobs ON jobworkunitassoc.jobID = jobs.ID 
        WHERE jobs.done = 1 
    ) 
    OR workunitInputs.inputID IS NULL 
) 
GROUP BY workunits.ID

谢谢,伊斯特万。

最佳答案

将该条款更改为:

AND ( 
    workunitInputs.inputID NOT IN ( 
        SELECT workunitOutputs.outputID 
        FROM workunitOutputs 
        LEFT JOIN workunits ON workunitOutputs.workunitID = workunits.ID 
        LEFT JOIN jobworkunitassoc ON workunits.ID = jobworkunitassoc.workunitID 
        LEFT JOIN jobs ON jobworkunitassoc.jobID = jobs.ID 
        WHERE jobs.done != 1 
    )

这是基于逻辑重言式:All X in Y === No X in !Y

关于MySQL - 每个值都在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11960945/

相关文章:

php - 如果与 mysql 或 php 的值相同,则对数据进行分组?

php - WordPress 按 wp_postmeta 中的查询排序

php - 可以在 "UUID()"上设置长度吗?

mysql - 使用带 IN 子句的索引并按主键排序

mysql - Vagrant Box - 使用 apt 安装 MySql 5.7

mysql - sql中如何统计两个表中相同的值

mysql - SQL - 连接两个表

mysql - 仅全文搜索列值的前 100 个字符

php - 如何使用 OR 条件从 cakephp 3.0 中的 mysql 表中获取记录?

mysql - 多个 JOIN 太复杂