【问题标题】:The multi-part identifier could not be bound sql where clause多部分标识符无法绑定 sql where 子句
【发布时间】:2017-12-07 06:15:16
【问题描述】:

我正在尝试使用下面的代码将两个表相乘以获得一个新的计算列。我正在使用 SQL Server Express Edition 和 SQL Server Management Studio。

select 
    [Yield_unpiv].[SubPrecinct],
    [Yield_unpiv].[LandUse],
    [Yield_unpiv].[Yield] * [LU_Rules_Final].[AM_GenRateFinal] * [LU_Rules_Final].[AM_In_factor] / [LU_Rules_Final].[UnitValue] as AM_In
from 
    Yield_unpiv, LU_Rules_Final
where 
    [Yield_unpiv].[LandUse]=[LU_Rules_Final].[LandUse]

但是,我收到以下错误

无法绑定多部分标识符“Yield_unpiv.LandUse”。

Yield_unpiv 是这样设置的:

SubPrecinct | Yield     | LandUse
P1            Unique #s   LDResi 
P1                        MDResi 
.                           .
.                           .
.                           .
P2                       LDResi 
P2                       MDResi 
.                           .
.                           .
.                           .

LU_Rules_Final 是这样设置的:

LandUse    | UnitValue | AM_GenRateFinal | AM_In_factor
LDResi       1             2.5                0.5
BulkyGoods   100           7                  0.7
MDREsi       1             0.52               0.1  
.
.
.

不确定为什么我会收到此多部分标识符“Yield_unpiv.LandUse”无法绑定错误。

请帮忙!

【问题讨论】:

标签: sql sql-server ssms where identifier


【解决方案1】:

我不知道您的错误的确切原因,但这可能与列 LandUse 出现在两个表中有关。我推测重构它以使用显式连接可以解决问题:

SELECT
    t1.[SubPrecinct],
    t1.[LandUse],
    t1.[Yield] * t2.[AM_GenRateFinal] * t2.[AM_In_factor] / t2.[UnitValue] AS AM_In
FROM Yield_unpiv t1
INNER JOIN LU_Rules_Final t2
    OM t1.[LandUse] = t2.[LandUse];

如果这解决了您的问题,那么这意味着不使用过时的 ANSI-92 之前的 SQL 连接样式的另一个理由。尽可能始终使用显式连接。

【讨论】:

  • 感谢您的回复。事实证明,我的代码很好,而且 SQL 只是没有更新我已经创建了我正在使用的表(即使启用了 IntelliSense)。但是,感谢您提出使用显式联接的建议。我认为这是一种更清洁的方式,我会接受它。
  • @Anabelle 是的,我希望您的原始查询能够正常工作,尽管有更好的编写方法。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 2020-06-16
相关资源
最近更新 更多