从一个表中提取名称,除非另一个表中存在行

时间:2013-07-30 20:15:15

标签: sql-server sql-server-2008 sql

我有以下查询:

SELECT a.id, a.Nome, ...
FROM cadClientes as a 
...
join Contatos_Clientes as f on a.id = f.idCliente 

问题在于Contatos_Clientes中有时没有一行。

如果Nome存在,我想返回Contatos_Clientes,否则从Nome返回cadClientes

1 个答案:

答案 0 :(得分:6)

如果要仅显示一个表中的值,而不是另一个表中的值,则应将连接更改为LEFT OUTER JOIN。例如:

SELECT Nome = COALESCE(c.Nome, cc.Nome) -- ,... Other columns
FROM dbo.cadClientes AS c
-- other joins...
LEFT OUTER JOIN dbo.Contatos_Clientes AS cc
ON c.id = cc.idCliente;

创建/引用对象时请始终使用模式前缀,并尝试使用有意义的别名而不是a,b,c ......