SQL选择所有连接的值都相等的位置
我试图使用此页面作为参考,但无法使我的情况发挥作用 我有两个表-一个是任务列表,另一个是任务步骤 我想加入SQL选择所有连接的值都相等的位置,sql,sql-server,select,join,Sql,Sql Server,Select,Join,我试图使用此页面作为参考,但无法使我的情况发挥作用 我有两个表-一个是任务列表,另一个是任务步骤 我想加入taskID上的表,找到taskID,其中所有步骤都标记为完成,但总体任务尚未标记为完成 table1 table2 taskID | taskName | taskComplete | taskID | stepID | stepComplete 1 task
taskID
上的表,找到taskID
,其中所有步骤都标记为完成,但总体任务尚未标记为完成
table1 table2
taskID | taskName | taskComplete | taskID | stepID | stepComplete
1 task1 0 1 21 1
2 task2 0 1 12 1
1 34 1
1 11 1
2 8 0
2 6 0
2 4 1
我相信这应该可以做到:
SELECT taskID
FROM table1 t1
WHERE NOT EXISTS (SELECT 1
FROM table2
WHERE taskID = t1.id
AND stepComplete = 0)
AND t1.taskComplete = 0;
SQL问题最好通过集中思考来解决 您希望选择表1中的元素集,其中table1.taskComplete为true,并且表2中的所有步骤都已完成 这可以改写为您希望查找taskComplete=0的表1条目,而stepComplete=0的表2中没有条目
SELECT table1.*
FROM table1
WHERE table1.taskComplete = 0 AND table1.taskID not in (SELECT taskID FROM table2 WHERE stepComplete = 0)
您可以将问题重新表述为“我想查找尚未标记为完成但所有步骤都标记为完成的任务”,或者换句话说:“我想查找尚未标记为完成但没有任何步骤标记为未完成的任务” 当使用这样的措辞时,很明显,
不存在
操作符可以完成这项工作,现在只需将英语翻译成SQL:
SELECT *
FROM table1
WHERE taskComplete = 0 AND
NOT EXISTS (SELECT *
FROM table2
WHERE table2.taskID = table1.taskID AND stepComplete = 0)
“所有步骤都标记为已完成,但总体任务尚未标记为已完成。”感谢@Jean FrançoisSavard,我脑子里有一部分忘了将其添加到where子句中。请注意,OP指定他只想检索
taskID
。请注意,OP指定他只想检索taskID
。