我想将此问题转换为查询。 猜测应该是三个leftjoin和两个select
exercises
+-----+---------+
| id | require |
+-----+---------+
| 1 | |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
| 5 | |
| 6 | 5 |
| 7 | |
+-----+---------+
done
+-----+
| id |
+-----+
| 1 |
| 2 |
+-----+
完成练习一和练习二后,我现在可以做哪些练习?
解:3,5,7
我的逻辑过程,一步一步:
(全部)- 选择(必需 - 完成)-(完成)
(1,2,3,4,5,6,7) - 选择((1,2,3,5)-(1,2)) - (1,2)
(1,2,3,4,5,6,7) - 选择(3,5) - (1,2)
(1,2,3,4,5,6,7) -(4,6) - (1,2)
(3,5,7)
如何编写查询?
最佳答案
另一种没有子选择的解决方案
SELECT e.id FROM exercises e
LEFT JOIN done d ON d.id = e.id
LEFT JOIN done d_req ON d_req.id=e.require
WHERE (d.id IS NULL AND d_req.id IS NOT NULL)
OR (e.require IS NULL AND d.id IS NULL)
WHERE
可以简化(分布性)
WHERE d.id IS NULL AND (d_req.id IS NOT NULL OR e.require IS NULL )
关于MySQL 排除和要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14401527/