SQL选择所有连接值等于值的位置

时间:2015-05-05 16:05:56

标签: sql sql-server select join

我正在尝试使用此页面作为参考,但无法让我的情况发挥作用 SQL: Select records where ALL joined records satisfy some condition

我有两个表 - 一个是任务列表,另一个是任务步骤 我想加入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

3 个答案:

答案 0 :(得分:3)

我相信这应该可以解决问题:

puts "Do you need anything?".upcase
answer = " "
number = 1900
bye_count = 0

while true
  answer = gets.chomp
  if answer == answer.downcase
    bye_count = 0
    puts "Speak up!".upcase
  elsif answer == "BYE"
    bye_count = bye_count + 1
    if bye_count == 3
      puts "Okay then!".upcase
      break
    end
  else
    bye_count = 0
    puts "No, not since #{number + rand(35)}".upcase
  end
end  

答案 1 :(得分:2)

最好通过集合思考来解决SQL问题。

您希望在表1中选择table1.taskComplete为true且table2中的所有步骤都已完成的元素集。

这可以被重写为你想要找到task1mplete = 0的table1条目,并且table2中没有stepComplete = 0的条目。

SELECT table1.*
FROM table1
WHERE table1.taskComplete = 0 AND table1.taskID not in (SELECT taskID FROM table2 WHERE stepComplete = 0)

答案 2 :(得分:1)

您可以将问题重新定义为“我想找到尚未标记为已完成但尚未标记所有步骤的任务”,或者换句话说:“我想找到尚未标记为已完成但尚未完成的任务” t有任何标记为不完整的步骤“。

当这样表达时,很明显not exists运算符可以完成这项工作,而现在只需要将英语翻译成SQL:

SELECT *
FROM   table1
WHERE  taskComplete = 0 AND
       NOT EXISTS (SELECT *
                   FROM   table2
                   WHERE  table2.taskID = table1.taskID AND stepComplete = 0)