遇到一种奇怪的写入查询方式

时间:2012-05-08 07:53:18

标签: sql

这似乎是stackoverflow上最愚蠢的问题,但我只是想知道你为什么会写这样的查询:

Select e1.Emploee_ID, e1.Departement_ID From Employee e 
Inner join Employee E1 on e.employee_id= e1.Employee_ID
Inner join Departement d on d.dep_id= e1.departement_id

为什么我们要加入员工?我明显的疑问是

select e.employee_ID, e.Departement_id from employee e 
inner join  Departement d on d.dep_id= e1.departement_id

5 个答案:

答案 0 :(得分:2)

使用内部联接引用PK是多余的

您通常会加入同一个表以链接另一条记录,例如,如果您有一个引用员工老板的FK列。

假设您在表Boss_ID中有一个可以为空的外键列Employee

Select e.Employee_ID, boss.Employee_id, d.Departement_ID 
From Employee e  
LEFT OUTER JOIN Employee boss on boss.Employee_ID=e.Boss_ID
INNER JOIN Departement d on d.dep_id= e.departement_id

请注意,我使用LEFT OUTER JOIN来获得没有老板的员工。

答案 1 :(得分:0)

我能看到的。你不需要这个联接。

Inner join Employee E1 on e.employee_id= e1.Employee_ID

这两个查询将给出相同的结果。我无法在JOIN表格上看到Employee两次。

答案 2 :(得分:0)

在此查询中,我看不到有任何理由将Employee加入Employee。在过去,我偶尔会在同一个查询中使用同一个表的两个子集,但这里没有类似的内容。对我而言,这看起来是错误的。

答案 3 :(得分:0)

如果 employee_id 是PK,那么它没有意义,但如果不是,则两个查询将返回不同的结果。

第一个查询不会返回NULL employee_id,并且会返回N次出现的多个条目的 N ^ 2 结果。

答案 4 :(得分:0)

更简单的是:

  

从员工e,部门d中选择e.employee_ID,d.dep_name,其中d.dep_id = e.departement_id