说,我有以下两个表: 表客户:
id, salutation, forename, lastname, companyID
和一家餐桌公司:
Company_id, Company_name, Company_address
我希望对所有用户及其公司(如果他们属于一个)进行评估
salutation, forename, lastname, companyName
基本上是一个非常简单的脚本:
select salutation, forename, lastname, company_name
from customer, company
where companyID=Company_id;
现在麻烦的是,companyID可以为null。 (客户不需要成为公司的一部分)。并且由于公司表中没有companyID null条目,并且由于联合声明而忽略了没有列出公司ID的任何客户。
我可以把它分成两个脚本,一个用于companyid = null,另一个用于非null,并将它们与UNION命令混合,但有可能是if语句吗?
类似的东西:
select salutation, forename, lastname, placeholder
from customer, company
where
if companyID=null then placeholder=null
else (companyID=Company_id and placeholder=company_name);
我知道有一个case语句,可以检查字段的值并返回其他内容,但有没有办法将它与一个联合组合到另一个表?
答案 0 :(得分:3)
您正在寻找外部联接:
select cu.salutation, cu.forename, cu.lastname, co.company_name
from customer cu
left join company co on cu.companyID = co.Company_id;
通常,您应该停止在where
子句中使用古老的隐式连接语法,并使用显式JOIN
运算符。这也是实际做外连接的唯一跨DBMS方式(支持某些专有外连接语法的所有DBMS都已弃用)
答案 1 :(得分:0)
试试这个
select salutation, forename, lastname, placeholder
from customer, company
where
(companyID=null and placeholder=null )
OR
(companyID=Company_id and placeholder=company_name);
答案 2 :(得分:0)
使用左连接而不是内连接
select a.salutation, a.forename, a.lastname, a.company_name
from customer a
left outer join company b
on a.companyID=b.companyID;