SQL仅在数据存在时从另一个表中选择列

时间:2013-01-23 20:17:25

标签: sql sql-server

我有两张桌子,我从第一张桌子中选择数据。如果条件满足(别名类型= 2)并且第二个表中的数据存在第一个表中的id,我想从第二个表中选择列。以下是解释更多信息的数据:

表1

id | Name         | Location  
---+--------------+---------  
34 |John Smith    |NewYork  
36 |Mike Smith    |London  
45 |Bob Smith     |Los Angeles  

表2

id | Alias             | Alias type     
---+-------------------+-------  
36 |Warren Johnson     |1  
36 |William Williams   |2  

如果别名类型= 2,则需要结果

id |Name               | Location   
---+-------------------+---------  
34 |John Smith         |NewYork  
36 |William Williams   |London  
45 |Bob Smith          |Los Angeles  

你能帮我写一下查询来获得想要的结果吗?告诉我是否需要解释更多。我使用的是SQL Server数据库。

3 个答案:

答案 0 :(得分:4)

您可以在Table2上使用left outer join,然后使用COALESCE Alias和Name结果:

SELECT Table1.ID, COALESCE(Table2.Alias, Table1.Name) AS Name, 
    Table1.Location
FROM Table1
LEFT OUTER JOIN Table2 ON Table1.ID = Table2.ID AND Table2.AliasType = 2

COALESCE通过查找提供的值中的第一个非空值来工作。

答案 1 :(得分:2)

尝试这样的事情 - 你只需要使用CASE

SELECT T1.Id, 
   CASE WHEN T2.Alias IS NOT NULL THEN T2.Alias ELSE T1.Name END as Name,
   t1.Location
FROM Table1 T1
   LEFT JOIN Table2 T2 ON T1.Id = T2.Id AND T2.AliasType = 2

这是SQL Fiddle

祝你好运。

答案 2 :(得分:2)

COALESCE函数将允许您使用后备表达式,以便使用表2中的名称(如果存在),否则使用表1中的名称。当行存在时,LEFT外连接仅连接表2,如果没有连接记录,则t2.name为空。

SELECT t1.id, COALESCE(t2.name, t1.name), t1.location FROM [Table 1] as t1 LEFT JOIN [Table 2] as t2 on t1.id=t2.id and t2.[alias type]=2