在 SQL 中连接,然后在 Left Join 中使用
Concatenate in SQL and then use in Left Join
我有以下 SQL 代码:
SELECT a.*,CONCAT(b.FirstName, " ", b.LastNameNoSuffix) AS Concatenate, b.*
FROM [xxxx].[dbo].[xxxx] a
Left Join [xxxx].[dbo].[xxxx] b
on b.Concatenate= a.[display_name]
但是我收到 Invalid column name
错误
希望它很简单,但我似乎无法解决?
谢谢!
您不能在 LEFT JOIN
中使用 Concatenate,您可以像下面那样使用 SUB SELECT 或 CTE
函数
SELECT a.*,b.*
FROM [xxxx].[dbo].[xxxx] a
LEFT JOIN (
SELECT t.*
,CONCAT (
t.FirstName
,' '
,t.lastname
) AS Concatenate
FROM [xxxx].[dbo].[yyyyy] t
) b ON b.Concatenate = a.[display_name]
注意:如果您使用的是 SQL 服务器,请在 CONCAT
函数中使用单引号而不是双引号。
这是你可以做你需要的事情的方法:
SELECT a.*, b.*
FROM test a
join (select t2.*
, CONCAT(t2.FirstName, ' ', t2.lastname) AS Concatenate
from test2 t2) b on b.Concatenate = a.[display_name]
这是一个小演示:
您不能在同一范围内重复使用 SELECT
子句中定义的别名(ORDER BY
子句分开)。您可以使用子查询(创建新范围)或重复表达式。我发现计算很简单,所以第二个解决方案就足够了:
select a.*, b.firstname + ' ' + b.lastnamenosuffix as concatenate, b.*
from a
left join b on b.firstname + ' ' b.lastnamenosuffix = a.display_name
备注:
不要对文字字符串使用双引号!仅使用单引号,如标准 SQL
中所指定
SQL服务器支持+
字符串拼接,稍微缩短了表达式
使用 VALUES()
子句和 CROSS APPLY
。它几乎是为此而设计的:
SELECT a.*, v.Concatenate, b.*
FROM [xxxx].[dbo].[xxxx] a LEFT JOIN
([xxxx].[dbo].[xxxx] b CROSS APPLY
(VALUES (CONCAT(b.FirstName, ' ', b.LastNameNoSuffix))
) v(concatenate)
)
ON v.Concatenate = a.[display_name]
我有以下 SQL 代码:
SELECT a.*,CONCAT(b.FirstName, " ", b.LastNameNoSuffix) AS Concatenate, b.*
FROM [xxxx].[dbo].[xxxx] a
Left Join [xxxx].[dbo].[xxxx] b
on b.Concatenate= a.[display_name]
但是我收到 Invalid column name
错误
希望它很简单,但我似乎无法解决? 谢谢!
您不能在 LEFT JOIN
中使用 Concatenate,您可以像下面那样使用 SUB SELECT 或 CTE
函数
SELECT a.*,b.*
FROM [xxxx].[dbo].[xxxx] a
LEFT JOIN (
SELECT t.*
,CONCAT (
t.FirstName
,' '
,t.lastname
) AS Concatenate
FROM [xxxx].[dbo].[yyyyy] t
) b ON b.Concatenate = a.[display_name]
注意:如果您使用的是 SQL 服务器,请在 CONCAT
函数中使用单引号而不是双引号。
这是你可以做你需要的事情的方法:
SELECT a.*, b.*
FROM test a
join (select t2.*
, CONCAT(t2.FirstName, ' ', t2.lastname) AS Concatenate
from test2 t2) b on b.Concatenate = a.[display_name]
这是一个小演示:
您不能在同一范围内重复使用 SELECT
子句中定义的别名(ORDER BY
子句分开)。您可以使用子查询(创建新范围)或重复表达式。我发现计算很简单,所以第二个解决方案就足够了:
select a.*, b.firstname + ' ' + b.lastnamenosuffix as concatenate, b.*
from a
left join b on b.firstname + ' ' b.lastnamenosuffix = a.display_name
备注:
不要对文字字符串使用双引号!仅使用单引号,如标准 SQL
中所指定SQL服务器支持
+
字符串拼接,稍微缩短了表达式
使用 VALUES()
子句和 CROSS APPLY
。它几乎是为此而设计的:
SELECT a.*, v.Concatenate, b.*
FROM [xxxx].[dbo].[xxxx] a LEFT JOIN
([xxxx].[dbo].[xxxx] b CROSS APPLY
(VALUES (CONCAT(b.FirstName, ' ', b.LastNameNoSuffix))
) v(concatenate)
)
ON v.Concatenate = a.[display_name]