JOIN USING的顺序如何影响?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

这是一个有4个表的练习:https//www.w3resource.com/sql-exercises/joins-hr/sql-joins-hr-exercise-13.php

我试图理解为什么使用:

 SELECT job_title, department_name, first_name || ' ' || last_name AS `enter code here`Employee_name, start_date 
    FROM job_history 
    JOIN jobs USING (job_id) 
    JOIN departments USING (department_id) 
    JOIN  employees USING (employee_id)
WHERE start_date>='1993-01-01' AND start_date<='1997-08-31';

使用时返回正确的值

 SELECT job_title, department_name, first_name || ' ' || last_name AS Employee_name, start_date 
    FROM job_history 
    JOIN jobs USING (job_id) 
    JOIN  employees USING (employee_id) 
    JOIN departments USING (department_id) 
WHERE start_date>='1993-01-01' AND start_date<='1997-08-31';

什么都不返回(只是更改了JOIN顺序)

提问于
用户回答回答于

通常,更改连接的顺序不应该有所不同 - 如果查询编译,那么它应该返回相同的结果。

但是,您正在使用该using条款。这可能会导致问题,因为连接键的范围只是表到那一点

一种可能性是,至少三个表具有department_idemployeesdepartments和一个或两个的jobs表。

第一个查询正在查找department_id作业表,并要求它们是相同的。

第二个查询也带来了employees.department_id范围,并要求它与其他查询匹配。没有行的员工的部门与他们分配的工作部门相匹配。

用户回答回答于

因为它使用内部连接。您要么员工没有部门,要么没有员工。您应该能够使用左连接或右连接来纠正。

扫码关注云+社区

领取腾讯云代金券