我正在尝试使用此页面作为参考,但无法让我的情况发挥作用 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
答案 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)