3相同的外键在一个表中,select语句

问题描述:

我有表错误,这个表有3个外键 - ID_empl,ID_empl1,ID_empl2来自同一个表 - 雇主那里ID_empl是主键,也有其他atributes名称和Surname.ID_empl指的是谁修复错误,ID_empl1指的是谁报告了错误,ID_empl指的是谁接管错误。3相同的外键在一个表中,select语句

现在我想在这个表上做SELECT错误,我想要声明像:ID_empl - name, surname; ID_empl1 - name, surname; ID_empl2 - name, surname。如果只有1 FK可以说ID_empl我会做SELECT er.ID_empl, em.name||em.surname as EMPLOYER from employer em, error er where er.ID_empl=em.ID_empl。但我不知道如何做到这一点与3个相同的FKs,我需要这个信息(名字+姓氏)每个FK 3次。

小Q2:我有表格公司有一些属性和FK ID_empl指的是谁管理这家公司。该FK可以为空。现在,当我想要做的:select e.name||e.surname as EMPLOYER from employer e, company c where e.ID_empl=c.ID_empl我只得到行ID_empl不公牛,但我想要所有的行。有一个连接问题,ID_empl可以为空,但我不知道如何解决这个问题。

+1

您能否请清理您的格式,并向我们展示一些表格结构? –

+0

是的,我会做,但现在我的手机及其凌晨3点在这里。此外,我会删除此评论。 –

您所描述的内容听起来像是多重连接的工作。使用你的语法(旧的,过时的,不建议使用 - 甚至甲骨文自己推荐使用现代语法),这将是

select [whatever], emp1.name || ' ' || emp1.surname as repaired, 
        emp2.name || ' ' || emp2.surname as reported, 
        emp3.name || ' ' || emp3.surname as took_over 
from errors er, employer emp1, employer emp2, employer emp3 
where er.ID_empl = emp1.ID_empl 
    and er.ID_empl1 = emp2.ID_empl 
    and er.ID_empl2 = emp3.ID_empl 

通过这种方式,姓名为“修复”(即谁修复错误的人)是从“雇主”表中读取“error”表中的id = ID_empl(您表示这是包含用于修复错误的ID的列的外键),则“雇主”的姓和名选自“雇主“表中id = ID_empl1表中的”error“(带有报告错误的人的外键)以及类似的”接管“。

正确的,现代的,SQL标准,建议加入语法

..... from errors er join employer emp1 on er.ID_empl = emp1.ID_empl 
        join employer emp2 on er.ID_empl1 = emp2.ID_empl 
        join employer emp3 on er.ID_empl2 = emp3.ID_empl 

关于第二个问题,你只需要一个外部联接。对于这一点,也有“旧式”专有甲骨文语法,甲骨文本身不建议。适合您的外连接的现代SQL标准语法为:

select [whatever], e.name || ' ' || e.surname 
from company c left outer join e on c.ID_empl = e.ID_empl