我有一些表格:
Employee: id, name, id_suc, id dep, id_sec Suc : id_suc, name Dep : id_dep, id_suc, name Sec : id_sec, id_dep, id_suc, name
不要责怪我,这是一个现有的应用程序,我没有创建数据库,因为里面的数据太多而报告依赖于它,所以无法触及结构。我只是想按照要求修改报告。
我查询:
SELECT DISTINCT
s.name as sucurs,
d.name as depart,
c.name as section,
e.name AS emp
FROM
employee e
join suc s on (e.id_suc = s.id_suc)
join dep d on (e.id_dep = d.id_dep)
join sec c on (e.id_sec = c.id_sec)
ORDER BY
sucurs, depart, section, emp
带给我一个笛卡尔积。我想要:
sucurs1, depart1, section1, emp1
sucurs1, depart1, section1, emp2
.....
(然后在报告中我按成功分组,然后是dep,然后是秒)
相反,我得到了:sucurs1, depart1, section1, emp1
sucurs2, depart1, section1, emp1
等等。它会带来所有sucurs
,所有depart
,所有section
,有时会重复emp
。
我错过了什么,但不知道是什么。有线索吗?
答案 0 :(得分:5)
好吧,你总是加入表格employee
- 似乎Dep
也链接到Suc
- 所以你需要一个第二个JOIN条件(不仅在id_dep
加入,还在id_suc
加入!)。表Sec
甚至需要三个 JOIN条件,因为它与Employee
表共享三个ID。
SELECT DISTINCT
s.name as sucurs,
d.name as depart,
c.name as section,
e.name AS emp
FROM
employee e
INNER JOIN
suc s ON e.id_suc = s.id_suc
INNER JOIN
dep d ON e.id_dep = d.id_dep AND e.id_suc = d.id_suc
INNER JOIN
sec c ON e.id_sec = c.id_sec AND e.id_suc = c.id_suc AND e.id_dep = c.id_dep
ORDER BY
sucurs, depart, section, emp