- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究著名的 SQLzoos 的第一个问题,并且正在研究 using Null
部分:http://sqlzoo.net/wiki/Using_Null
问题是:
List the teachers who have NULL for their department.
相应的 SQL 查询是:
SELECT t.name
FROM teacher t
WHERE t.dept IS NULL
这是一种反连接吗?具体来说,这是左反连接吗?
最佳答案
这根本不是联接。
该语句仅过滤没有指定部门的教师的记录。
教师和院系的设置差异,教师\院系
将是一种“反加入”
SELECT
t.name
FROM teacher t
LEFT JOIN department d ON d.id = t.dept_id
WHERE d.id IS NULL
乍一看,这个语句的作用与您的语句的作用相同,如果强制执行外键引用,它将保证完全做到这一点。然而,此语句的一个用途是检索分配到已被删除的系的教师(例如,如果英语文学系和英语作为第二语言系被重组为英语系)
另一个“反连接”是对称差异,它仅从两个集合中选择元素,如果它们无法连接,即
(teacher \ department) U (department \ teacher)
我想不出使用教师和部门的激励示例,但在支持 FULL OUTER JOIN 的数据库上编写对称差异的一种方法是:
SELECT
t.name
FROM teacher t
FULL OUTER JOIN department d ON d.id = t.dept_id
WHERE d.id IS NULL OR t.id IS NULL
对于 MySQL,该语句必须写为两个语句的并集。
SELECT
t.name teacher_name, d.name department_name
FROM teacher t
LEFT JOIN department d ON d.id = t.dept_id
WHERE d.id IS NULL
UNION ALL
SELECT
t.name teacher_name, d.name department_name
FROM teacher t
LEFT JOIN department d ON d.id = t.dept_id
WHERE t.id IS NULL
浏览我的一个项目,我发现了对称差异的一种用途:
上下文:
I have three tables:
users
,users_gameplay_summary
,users_transactions_summary
. I needed to email those users who created their accounts in the past 7 days AND one of the followinghave transacted but have not played
orplayed but have not transacted.
为了获取列表,我有这个查询(注意,这是为 Postgresql 编写的,不适用于 MySQL,但它说明了对称差异用例):
SELECT
COALESCE(g.user_id, t.user_id) user_id
FROM users_gameplay_summary g
FULL OUTER JOIN users_transactions_summary t ON t.user_id = g.user_id
WHERE COALESCE(g.user_id, t.user_id) IN (
SELECT user_id
FROM users
WHERE created_at > CURRENT_DATE - '7 day'::interval)
AND (g.user_id IS NULL OR t.user_id IS NULL)
关于mysql - 我不确定 : Is this an anti-join?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36341153/
我是一名优秀的程序员,十分优秀!