我正在尝试创建SELECT
,其中包括各种外键来列出其具有的所有行,但是有两个外键可以为空。
bank_id
和bbank_id
可以为null,因此在此示例中,它将仅列出bank_id
和bbank_id
中没有空值的行,但是我需要它返回bank_id
和bbank_id
为null或不为null的行。
我尝试使用IS NOT NULL AND NULL
,但这是行不通的。
SELECT E.emp_id, E.emp_name, E.emp_surname1, E.emp_surname2,
J.job_name, U.ubi_name, D.dep_name, POR.por_type,
B.bank_name, BB.bbank_name
FROM public.employee E, public.ubi U,
public.jobs J, public.department D,
public.percenttable POR, public.bank B,
public.bbank BB
WHERE E.ubi_id = U.ubi_id AND E.job_id = J.job_id
AND E.dep_id = D.dep_id AND E.por_id = POR.por_id
AND E.bank_id = B.bank_id AND E.bbank_id = BB.bbank_id
AND E.ubi_id IS NOT NULL AND E.job_id IS NOT NULL AND E.dep_id IS NOT NULL
AND E.por_id IS NOT NULL AND E.bank_id IS NOT NULL AND E.bbank_id IS NOT NULL
ORDER BY E.emp_id ASC;
我阅读了一些有关使用LEFT JOIN的信息,但不知道如何在此处实现。
答案 0 :(得分:1)
您需要使用27年前在SQL-92标准中定义的现代JOIN
语法。这是使用左外部联接的查询外观:
select
e.emp_id, e.emp_name, e.emp_surname1, e.emp_surname2,
j.job_name, u.ubi_name, d.dep_name, por.por_type,
b.bank_name, bb.bbank_name
from public.employee e
left join public.ubi u on e.ubi_id = u.ubi_id
left join public.jobs j on e.job_id = j.job_id
left join public.department d on e.dep_id = d.dep_id
left join public.percent por on e.por_id = por.por_id
left join public.bank b on e.bank_id = b.bank_id
left join public.bbank bb on e.bbank_id = bb.bbank_id
where e.ubi_id is not null
and e.job_id is not null
and e.dep_id is not null
and e.por_id is not null
-- and e.bank_id is not null -- removed per your requirement
-- and e.bbank_id is not null -- removed per your requirement
order by e.emp_id asc
欢迎来到21世纪! ;-)