SQL仅当数据存在时才从其他表中选择列

SQL仅当数据存在时才从其他表中选择列,sql,sql-server,Sql,Sql Server,我有两个表,我从第一个表中选择数据。如果条件为“满足”(别名类型=2),并且第一个表中id的第二个表中的数据存在,则我要从第二个表中选择该列。以下是更多的数据解释: 表1 id | Name | Location ---+--------------+--------- 34 |John Smith |NewYork 36 |Mike Smith |London 45 |Bob Smith |Los Angeles id | Alias

我有两个表,我从第一个表中选择数据。如果条件为“满足”(别名类型=2),并且第一个表中id的第二个表中的数据存在,则我要从第二个表中选择该列。以下是更多的数据解释:

表1

id | Name         | Location  
---+--------------+---------  
34 |John Smith    |NewYork  
36 |Mike Smith    |London  
45 |Bob Smith     |Los Angeles  
id | Alias             | Alias type     
---+-------------------+-------  
36 |Warren Johnson     |1  
36 |William Williams   |2  
表2

id | Name         | Location  
---+--------------+---------  
34 |John Smith    |NewYork  
36 |Mike Smith    |London  
45 |Bob Smith     |Los Angeles  
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数据库。

尝试类似的方法--您只需要使用
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
这是你的电话号码

祝你好运。

试试这样的方法——你只需要使用
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
这是你的电话号码


祝你好运。

你可以在表2上使用一个
左外连接,然后别名和名称结果如下:

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
通过在提供的值中查找第一个非空值来工作。

您可以在表2上使用
左外部联接,然后别名和名称结果如下:

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
通过在提供的值中查找第一个非空值来工作。

COALESCE函数将提供一个后退表达式,以便使用表2中的名称(如果存在),否则使用表1中的名称。左侧外部联接仅在行存在时联接表2,如果未联接任何记录,则t2.name为null


选择t1.id,COALESCE(t2.name,t1.name),t1.location FROM[Table 1]作为t1左连接[Table 2]作为t1上的t2.id=t2.id和t2。[别名类型]=2

COALESCE函数将让您拥有一个回退表达式,以便使用表2中的名称(如果存在),否则使用表1中的名称。左侧外部联接仅在行存在时联接表2,如果未联接任何记录,则t2.name为null

选择t1.id,COALESCE(t2.name,t1.name),t1.location FROM[表1]作为t1左连接[表2]作为t1上的t2。id=t2.id和t2。[别名类型]=2

可能重复的