这是一个动物园的例子。
有三个表: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
答案 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
- 只有当您的表有重复项时才会发生这种情况(不太可能)。