mysql - 将 NOT IN 转换为 WHERE 加入
问题描述
我正在尝试获取与某个成员无关的所有记录,注册是一个交叉实体,可以解决成员到课程的多对多问题。
SELECT * FROM lesson
INNER JOIN training
ON training.id = lesson.training_id
WHERE lesson.id
NOT IN (SELECT registration.lesson_id FROM registration WHERE registration.member_id = 42)
我一直在尝试将此代码转换为使用 join 语句,但我无法让它工作。
SELECT l.*
FROM t_left l
LEFT JOIN
t_right r
ON r.value = l.value
WHERE r.value IS NULL
这种技术不起作用,因为这会返回根本没有任何关系的课程记录,我需要它来查看它是否与特定成员没有关系。
解决方案
你想把你的NOT IN
变成反加入吗?为什么?我发现NOT IN
更具可读性。
反正:
SELECT *
FROM lesson l
INNER JOIN training t ON t.id = l.training_id
LEFT JOIN registration r ON r.lesson_id = l.id AND r.member_id = 42
WHERE r.id IS NULL;
推荐阅读
- amazon-web-services - 错误:GraphQL 错误:查询条件缺少关键架构元素
- c++ - ifstream getline - 将 txt 文件读取到对象数组,但它只读取第一行?
- python - .py 和 .kv 的 Kivy 问题
- node.js - 让未解析的异步函数在 nodejs 服务器上执行
- c++ - c++程序打印出地址而不是值
- youtube - Silverstripe 3:覆盖 TinyMCE 样式
- python - 没有循环的迭代二项式更新
- mysql - 访问数据 MySQL。冻结构建
- python - python中键盘模块的奇怪错误
- r - OpenMP、随机变量和再现性