【发布时间】:2020-11-26 10:37:59
【问题描述】:
我有以下 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 错误
希望它很简单,但我似乎无法解决? 谢谢!
【问题讨论】:
-
在连接中使用 concat,而不是别名 - 在处理连接之前它不会解析别名!
-
Logical processing order of the SELECT statement: “因为 SELECT 子句是第 8 步,所以该子句中定义的任何列别名或派生列都不能被前面的子句引用”(
JOIN是第 3 步) -
对字符串文字使用单引号,例如
' '。 (双引号用于分隔标识符,因此" "是此处的列名。) -
如果您确实需要加入一个名称,并且在一个表中将它们分开而另一个则没有,那么您可能还需要考虑设计。将名称存储在其单独的部分中始终是可行的方法,但您始终可以将 (
PERSISTED) 计算列添加到连接它们的表中,以便于使用。将该列添加到别名为b的表中,您可以轻松地将JOIN添加到表a中。 -
从经验来看,一个名字是一个糟糕的
JOIN候选人/标识符。曾经有人住在离我几扇门的地方,他们的名字和DoB都一样,因为我们住在附近,地址非常相似。我当地的医生和牙医总是要花点时间才能弄清楚他们在和我们谁说话。
标签: sql sql-server string subquery left-join