2012-01-14 14 views
1

レコードが一致するTableMainのレコードがActivePNで必要です。また、[Parts]にも一致しています。結合はそのトリックを行うべきであると思われますが、私は "結合できませんでした"または "無効な列名"のどちらかのエラーに対処しています。複数パート識別子「t.PartNumber」をバインドできませんでした - ユニオンで

私はテンポラリテーブルを作成することで必要なものを達成できると確信していますが、それを簡単に保つようにしています。その後、私が理解したものから、これはトリックを行う必要があり、特定の製品型番ためActivePNsまたは部品の複数の行が存在しないと仮定すると、

Select * from TableMain t 
INNER JOIN (select [PartNumber] 
    From ActivePNs ap 
    Where ap.PartNumber = t.PartNumber 
    Union 
    select [Number] PartNumber 
    From [Parts] p 
    Where p.Number = t.PartNumber) c 
On t.PartNumber = c.PartNumber 

答えて

0

- だけTableMainの行を見つけるActivePNs で製品型番を持っているし、パーツ:

Select t.* 
from TableMain t 
    INNER JOIN ActivePNs ap ON t.PartNumber = ap.PartNumber 
    INNER JOIN Parts p ON t.PartNumber = p.Number 
+0

申し訳ありません - ActivePNまたはPartにPartNumberを持つTableMainの行を探しています。一言 - ActivePNとPartsには同じレコードがいくつかあると私にも分かります。だから、私はGroup Byをやる必要があるでしょう... – JonV

0

あなたの問題はUNIONSELECTです。

select [Number] PartNumber -- You rename Number to PartNumber 
    From [Parts] p 
    Where p.Number = t.PartNumber -- but still reference Number here 

SELECTNumberのエイリアシングは、クエリのWHERE部分での使用のための列p.Numberはありませんを意味します。

0

派生テーブルは、結合先のテーブルと相関させることはできません。

SELECT 
    t.*, 
    COALESCE(ap.PartNumber, p.Number) AS PartNumber 
FROM TableMain t 
    LEFT JOIN ActivePN ap ON ap.PartNumber = t.PartNumber 
    LEFT JOIN Parts p ON p.Number = t.PartNumber 
WHERE NOT (ap.PartNumber IS NULL AND p.Number IS NULL) 
+1

あなたはどういう意味ですか?(ap.PartNumberはNULLで、p.NumberはNULLです) – JonV

+0

@JonV:基本的にyesです。私は通常このような場合にPKをテストしますが、すぐにそのことを明らかにしてください。私の答えを更新しました。 –

関連する問題