使用派生表的SQL INNER JOIN子查询

时间:2017-02-05 21:22:44

标签: sql sql-server

这是一个动物园的例子。

有三个表:employee,animal和animal_employee,一个n:m表来建立两者之间的关系。 我想查询处理同一动物的员工。但是我这样做的方式我只能输出id号码。我想输出可以在表格中找到的实际名称:员工和动物。

这就是我现在所拥有的:

select distinct a.animal, a.employee, b.employee
from animal_employee a, animal_employee b
where a.animal = b.animal and a.employee > b.employee

1 个答案:

答案 0 :(得分:0)

首先,从不FROM子句中使用逗号。 始终使用正确的JOIN语法。

我想我会用CTE做到这一点:

with ae as (
      select ae.*, e.name as employee_name, a.name as animal_name
      from animal_employee ae join
           employee e
           on ae.employee = e.?? join  -- don't know what is used for the `JOIN` here
           animal a
           on ae.animal = a.??         -- don't know what is used for the `JOIN` here
     )
select a1.animal_name, ae1.employee_name, ae2.employee_name
from ae ae1 join
     ae ae2 
     on ae1.animal = ae2.animal and ae1.employee < ae2.employee;

你的问题不清楚表结构。 ??是用于连接的列。

如果结果集可能有重复项,则只需要select distinct - 只有当您的表有重复项时才会发生这种情况(不太可能)。