这个真的让我难住了。我有一个文件表,其中包含有关文件的信息,还有一个程序表,有点像每个文件的修订表。我需要做的是编写一个选择语句,它为我提供所有文档,其中所有过程的状态为“work_in_progress”。这是一个例子
程序表:
document_id | status
1 | 'wip'
1 | 'wip'
1 | 'wip'
1 | 'approved'
2 | 'wip'
2 | 'wip'
2 | 'wip'
在这里,我希望我的查询只返回文档 ID 2,因为它的所有状态都是 work_in_progress。我不想要 document_id 1,因为它的状态之一是“已批准”。我相信这是我想要的关系部门,但我不确定从哪里开始。这是 MySQL 5.0,仅供引用。
最佳答案
我会这样做:
SELECT document_id, document_name, ...
FROM documents AS d
WHERE NOT EXISTS (SELECT document_id
FROM procedures
WHERE document_id = d.document_id
AND status != 'wip');
也就是说,“显示所有文档,其中在过程中没有任何行的状态不是 'wip'”。
所以它与您描述的方式有点不同。而不是“所有的行都是'wip'”,您验证没有任何行不是'wip'。
关于SQL 选择 : "Give me all documents where all of the documents procedures are ' work in progress'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2673053/