【问题标题】:SQL Implicit Join joining 3 tablesSQL隐式连接加入3个表
【发布时间】:2013-06-18 02:32:58
【问题描述】:

我了解隐式 JOINS 已过时,但它用于家庭作业。他所有的隐式连接示例只连接 2 个表,我在任何地方都找不到连接 3 个的示例。

SELECT Name 
FROM Employee 
JOIN EmployeeSkills 
ON (EmployeeID=E.ID) 
JOIN Skill ON (SkillID=S.ID)
WHERE Title=’DBA’;

这是我想要的明确版本。我将如何隐含地写这个?

谢谢

【问题讨论】:

    标签: sql join implicit


    【解决方案1】:

    我是这样写的:

    SELECT E.Name FROM Employee E,EmployeeSkills ES,Skill S
    WHERE E.ID = ES.EmployeeID
      AND ES.SkillID = S.ID
      AND S.Title=’DBA’;
    

    与您收到的第一个答案几乎相同,但为了清楚起见,一旦我开始使用别名,我将始终使用它们,并确保您定义它们。在上面的示例中,员工和技能都可以有一个名称,而职称可以是员工的头衔或技能的名称。即使您不熟悉架构,使用表名(或别名)也可以轻松查看正在发生的事情。

    另外,可能是我多年前使用的数据库,但如果您没有按照引入表的顺序编写连接,它会影响性能(非常轻微,但在大数据上差异很大)。

    【讨论】:

    • 好点,当做隐式连接之类的反向操作时,最佳实践让我心烦意乱。 +1
    【解决方案2】:

    这与两个表格示例几乎相同:

    SELECT a.Name 
    FROM Employee a,EmployeeSkills b ,Skill c
    WHERE a.EmployeeID = b.ID 
       AND b.SkillID = c.ID
       AND Title=’DBA’;
    

    编辑:Everett Warren 对别名提出了很好的观点,最佳实践是不使用隐式连接,因为它们很久以前就被弃用了。

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 2019-03-29
      • 2021-03-05
      • 1970-01-01
      相关资源
      最近更新 更多