2017-12-07 12 views
0

新しい計算列を取得するために、以下のコードを使用して2つのテーブルを掛けようとしています。私は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" バインドできませんでした次のエラーを取得します。

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 "はバインドできませんでした。

助けてください!

+0

[習慣が悪い:古いスタイルのJOINを使用する](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- ANSI - ** 92 ** SQL標準(** 25 years ** ago)の* * ANSI 'JOIN'構文で置き換えられたold *スタイルのカンマ区切りのテーブル*その使用はお勧めしません。 –

答えて

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はい、それを書く良い方法があるにもかかわらず、元のクエリが動作することを期待していたでしょう。 –

関連する問題