1

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

4

3 回答 3

4

您可以left outer join在 Table2 上使用 a,然后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通过在提供的值中查找第一个非空值来工作。

于 2013-01-23T20:22:59.217 回答
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 小提琴

祝你好运。

于 2013-01-23T20:22:40.833 回答
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

于 2013-01-23T20:23:03.587 回答