gpt4 book ai didi

sql - self 加入。内部、外部或左侧重要吗?

转载 作者:行者123 更新时间:2023-11-29 11:46:57 24 4
gpt4 key购买 nike

我想知道这一点,因为自连接只需要一个表,所以感觉不会有什么不同。我读过这个问题:Explanation of self-joins .有几个答案,他们使用不同类型的连接来完成看似相同的任务。

那么这有没有区别呢?如果是这样,您能否举例说明如何操作?

最佳答案

这完全取决于您要对数据做什么。 This answer 很好地详细说明了 self 内部联接的外观。我最近写了一份报告,要求比较学生连续修读的两门类(class)的成绩。它是这样的:

给定一个表student_course:

STUDENT_ID  COURSE  GRADE
1 MTH251 A
1 MTH252 B
2 MTH251 A
2 MTH252 A
3 MTH251 B
3 MTH252 C

查询:

SELECT course1.student_id
, course1.course AS course1
, course1.grade AS grade1
, course2.course AS course2
, course2.grade AS grade2
FROM student_course course1
INNER JOIN student_course course2
ON course1.student_id = course2.student_id
WHERE course1.course = 'MTH251'
AND course2.course = 'MTH252';

Fiddle here.抱歉,PostgreSQL fiddle 对我不起作用,所以我使用 Oracle 进行测试。 PostgreSQL 等效项看起来应该大致相同。

现在说我想见一个可能没有参加过 MTH252 的学生。你可以这样做:

SELECT course1.student_id
, course1.course AS course1
, course1.grade AS grade1
, course2.course AS course2
, course2.grade AS grade2
FROM student_course course1
LEFT OUTER JOIN student_course course2
ON course1.student_id = course2.student_id
AND course2.course = 'MTH252'
WHERE course1.course = 'MTH251';

Other Fiddle

前者显示同时修读了 MTH251 和 MTH252 的学生,后者显示修读了 MTH251 的学生,无论他们是否完成了 MTH252。

正如 Nick.McDermaid 所指出的,自联接的工作方式与联接具有不同数据的两个表完全相同。

关于sql - self 加入。内部、外部或左侧重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44815287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com