SQL仅当数据存在时才从其他表中选择列
我有两个表,我从第一个表中选择数据。如果条件为“满足”(别名类型=2),并且第一个表中id的第二个表中的数据存在,则我要从第二个表中选择该列。以下是更多的数据解释: 表1SQL仅当数据存在时才从其他表中选择列,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
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
可能重复的