我有两张桌子,我从第一张桌子中选择数据。如果条件满足(别名类型= 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数据库。
答案 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