Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL选择所有连接的值都相等的位置_Sql_Sql Server_Select_Join - Fatal编程技术网

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