我想将员工转介给他们的经理。
我在这里有两个例子。他们都给了我一个我不想要的解决方案。
首次自我加入查询:
select m1.naam as medewerker, m2.naam as manager
from medewerkers m1, medewerkers m2
where m1.medewerker_id = m2.manager
order by 1;
解决方案的屏幕截图:
现在我只收到所有经理而不是雇员
第二次自我加入查询:
select b.naam as employee, a.naam as manager
from medewerkers a right outer join medewerkers b on(a.medewerker_id = b.manager);
解决方案的屏幕截图:
这将导致与额外员工相同的上述情况。问题是员工没有被提交给他们的经理(经理仍然被称为他们自己)。
目前这是我插入数据库的内容。也许我的插入值可能有问题。因为给定的拳击手不会工作
- 雇员
insert into MEDEWERKERS (medewerker_id, naam, adres, telefoon_nummer, salaris, functie, werknemer_winkel_nummer, manager)
values(11111112, 'Joost', 'Eindhoven Langloopstraat 1', 0678765478, 1500, 'baliemedewerker', 10, null);
insert into MEDEWERKERS (medewerker_id, naam, adres, telefoon_nummer, salaris, functie, werknemer_winkel_nummer, manager)
values(11111119, 'Rick','Gemert. Dunneweg 76', 0678768315, 2200, 'Manager', 10, 11111119);
答案 0 :(得分:1)
你要么倒退,要么从错误的方向拉(取决于你怎么看)。如果使用不同的表别名,则会更加明显:
select emp.naam as medewerker, man.naam as manager
from medewerkers emp, medewerkers man
where emp.medewerker_id = man.manager --asking for rows where the employee is the manager's manager!
order by 1;
更改您的连接顺序(并使用正确的连接语法):
select emp.naam as medewerker, man.naam as manager
from medewerkers emp
INNER JOIN medewerkers man
ON emp.manager = man.medewerker_id
order by 1;
这是修复错误输入数据的正确陈述:
insert into MEDEWERKERS
(medewerker_id, naam, adres, telefoon_nummer, salaris, functie, werknemer_winkel_nummer, manager)
values
(11111112, 'Joost', 'Eindhoven Langloopstraat 1', 0678765478, 1500, 'baliemedewerker', 10, 11111119);
insert into MEDEWERKERS
(medewerker_id, naam, adres, telefoon_nummer, salaris, functie, werknemer_winkel_nummer, manager)
values
(11111119, 'Rick','Gemert. Dunneweg 76', 0678768315, 2200, 'Manager', 10, null);
答案 1 :(得分:0)
问题是Rick/Rick
行等等吗?如果是这样,您可以通过修复NULL
子句替换管理员名称on
:
select e.naam as medewerker, m.naam as manager
from medewerkers e left join
medewerkers m
on m.medewerker_id = e.manager and
m.medewerker_id <> e.medewerker_id
order by 1;
或者,因为原始表中的问题可能重复,您可能需要:
select e.naam as medewerker, m.naam as manager
from medewerkers e left join
medewerkers m
on m.medewerker_id = e.manager
where e.medewerker_id <> e.manager
order by 1;