从包含空值的列中选择

时间:2019-05-23 00:44:43

标签: sql postgresql

我正在尝试创建SELECT,其中包括各种外键来列出其具有的所有行,但是有两个外键可以为空。

bank_idbbank_id可以为null,因此在此示例中,它将仅列出bank_idbbank_id中没有空值的行,但是我需要它返回bank_idbbank_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的信息,但不知道如何在此处实现。

1 个答案:

答案 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世纪! ;-)