使用if语句的表之间的SQL连接

时间:2014-04-08 11:33:38

标签: sql

说,我有以下两个表: 表客户:

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语句,可以检查字段的值并返回其他内容,但有没有办法将它与一个联合组合到另一个表?

3 个答案:

答案 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;