2016-06-28 4 views
0

特定の値を選択しようとしている内部結合で明示的な結合を試みているため、別のテーブルから。TSQLマルチパート識別子をバインドできませんでした(内部結合のselect xテーブルの明示的な結合)

マイSQL:

SELECT A.OrderID 
    , A.ItemID 
    , A.Line 
    , B.LID 
    , B.Quantity 
FROM Sales A 
INNER JOIN (SELECT X.OrderID 
       , X.Line 
       , SUM(X.Quantity) AS Quantity 
       , X.DestinationID 
       , X.SerialNum 
      FROM SalesDetail X 
      WHERE X.OrderID = A.OrderID 
      GROUP BY X.OrderID, X.Line, X.DestinationID, X.SerialNum 
      ) AS C 
      ON A.Line = C.Line 
      AND B.Quantity = C.Quantity 
      AND B.SerialNum = C.SerialNum 
INNER JOIN SalesContents B 
      ON A.OrderID = B.OrderID 
      AND A.ItemID = B.ItemID 
WHERE A.OrderID = '12345' 
AND A.ItemID = 'ABC123'; 

今、私はXテーブル内WHERE句を削除し、内部以内にそれをフィルタリングすることができますが、参加するが、私は、私は値を照会していたときに右のそれをフィルタリングしたいと思います。このステートメントを書き直して、バインドされていない識別子を回避する方法はありますか?

+0

あなた 'join' SalesContentsのB(別名)の後に条件'とB.Quantity = C.Quantity AND B.SerialNum = C.SerialNum'を移動します。 –

+0

あなたの質問はちょうど意味をなさない。結合条件は、定義される前に表の別名を参照します。私は、テーブルの別名( 'a'ではなく' sales'のための 's'のような)にテーブルの略語を使うと便利です。条件を正しく並べ替え、サブクエリの 'where'句を削除するようにクエリを修正すると、クエリを自分で修正できる可能性があります。 –

答えて

0

に参加することができ、あなたのサブクエリのWHERE句ON参加者への句。エイリアス 'A'はサブクエリで定義されていません。

SELECT A.OrderID 
    , A.ItemID 
    , A.Line 
    , B.LID 
    , B.Quantity 
FROM Sales A 
INNER JOIN (SELECT X.OrderID 
       , X.Line 
       , SUM(X.Quantity) AS Quantity 
       , X.DestinationID 
       , X.SerialNum 
      FROM SalesDetail X 
      --WHERE X.OrderID = A.OrderID 
      GROUP BY X.OrderID, X.Line, X.DestinationID, X.SerialNum 
      ) AS C 
      ON A.Line = C.Line 
      AND C.OrderID = A.OrderID --<-- move the filter here 
      AND B.Quantity = C.Quantity 
      AND B.SerialNum = C.SerialNum 
INNER JOIN SalesContents B 
      ON A.OrderID = B.OrderID 
      AND A.ItemID = B.ItemID 
WHERE A.OrderID = '12345' 
-- you could also put it here instead 
AND A.ItemID = 'ABC123'; 
1

定義されていない結合内の別名を参照することはできません。

あなただけにして最後にサブクエリを取る場合は、それが移動します....エイリアスC、何かのように

SELECT A.OrderID 
    , A.ItemID 
    , A.Line 
    , B.LID 
    , B.Quantity 
FROM Sales A 
INNER JOIN SalesContents B 
      ON A.OrderID = B.OrderID 
      AND A.ItemID = B.ItemID 
INNER JOIN (SELECT X.OrderID 
       , X.Line 
       , SUM(X.Quantity) AS Quantity 
       , X.DestinationID 
       , X.SerialNum 
      FROM SalesDetail X 
      WHERE X.OrderID = A.OrderID 
      GROUP BY X.OrderID, X.Line, X.DestinationID, X.SerialNum 
      ) AS C 
      ON A.Line = C.Line 
      AND B.Quantity = C.Quantity 
      AND B.SerialNum = C.SerialNum 
WHERE A.OrderID = '12345' 
AND A.ItemID = 'ABC123'; 
+0

まだサブクエリでAを参照しています – Eric

関連する問題