MySQL 排除和要求

标签 mysql sql left-join

我想将此问题转换为查询。 猜测应该是三个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/

相关文章:

mysql - 如何对超过 2 个表进行 LEFT JOIN?

mysql - 通过 Google Script 中的 jdbc 连接发送多个 mysql 指令

c# - 在不使用字符串的情况下将 ExecuteScalar 结果转换为 GUID?

php - 多个数据库事务 : mysql, SQL 服务器和 PHP

多个表上的 MySQL 连接和 COUNT()

mysql - 尝试使用仅在连接成功时适用的 'where' 进行左连接

php - Python 将文件行分成列表以发送到 MySQL

php - 在 codeigniter 中切换数据库服务器以进行读取和写入操作。

php - 尝试填充数据库,cakephp 由于插入而未保存

MySQL DateTime设置为0000-00-00 00 :00:00时选择MIN DateTime