2017-12-07 26 views
0

아래 코드를 사용하여 두 개의 테이블을 곱하여 새로운 계산 된 열을 얻으려고합니다. SQL Server Express Edition과 SQL Server Management Studio를 사용하고 있습니다.다중 부분 식별자를 바인딩 할 수 없습니다. where 절

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"구속 할 수없는 다음과 같은 오류를 얻을.

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

그리고 LU_Rules_Final은 다음과 같이 설정 :

Yield_unpiv은 다음과 같이 설정

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 "는 묶인 오류가 될 수 없습니다.

도와주세요!

+0

[나쁜 습관 : 오래된 스타일의 조인 사용] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- ANSI - ** 92 ** SQL 표준 (** 25 년 ** 전)에서 구식 * 쉼표로 구분 된 테이블 * 스타일 목록이 * 적절한 * ANSI'JOIN' 구문으로 대체되었습니다. 그 사용은 권장하지 않습니다. –

답변

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]; 

을, 다음은 SQL의 오래된 사전 ANSI-92 스타일의 조인을 사용하지 않는 또 하나의 이유를 의미한다. 항상 명시 적 조인을 사용하십시오.

+0

답변 해 주셔서 감사합니다. 내 코드는 괜찮 았고 SQL은 내가 사용하고 있던 테이블 (IntelliSense 사용 가능)을 작성했다는 것을 업데이트하지 않았 음이 밝혀졌습니다. 그러나 명시 적 조인을 사용하는 것에 대해 제안 해 주셔서 감사합니다. 나는 그것을하는 더 깨끗한 방법이라고 생각하고 나는 이것을 선상에 가져갈 것이다. – Ana

+0

@Anabelle 예 원래 작성한 쿼리를 작성하는 더 나은 방법이 있음에도 불구하고 원래 쿼리가 작동 할 것으로 기대했을 것입니다. –