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可以为空,但我不知道如何解决这个问题。
您所描述的内容听起来像是多重连接的工作。使用你的语法(旧的,过时的,不建议使用 - 甚至甲骨文自己推荐使用现代语法),这将是
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
您能否请清理您的格式,并向我们展示一些表格结构? –
是的,我会做,但现在我的手机及其凌晨3点在这里。此外,我会删除此评论。 –