• ベストアンサー

SQLServer2005のSQL文での別名の取り扱い

現在VB.net2005とSQLServer2005にてプログラムを組んでいます。 以下のように、サブクエリにて抽出されたStockテーブルと Tagテーブルを結合するSQL文を組みました。 *行頭は列番号です。 01- SELECT * FROM 02- ( 03-  SELECT A1.*, A3.* FROM 04-   ( 05-    SELECT A2.* FROM stock AS A2 06-    WHERE A2.StockDay < #日付#  '【SQLserverで流す時は "CONVERT(DATETIME, '日付')"】 07-    AND A2.ShopCode = '店番号' 08-   ) AS A1 09-  LEFT JOIN tag AS A3 10-  ON A1.StockNo = A3.StockNo 11- ) AS S1 これだとACCESS2000のクエリ上では正しく実行できます。 しかし、.net2005のサーバエクスプローラ上で上記SQL文を流しても、 「列 'StockNo' が 'S1' に複数回指定されました。」 とエラーが出てしまい実行することができません。 行03を "SELECT A1.* FROM" にするとSQLServer2005でも動きますが、 tagテーブルのフィールドが結果に含まれません。 tagテーブルのフィールドも結果に含みたいです。 どなたか原因や回避方法をご存知の方いらっしゃいましたら、 お手数ですが是非ともご教示頂きたいです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

10行目を見るとStockNo でA1,A3共に結合しているので、 A1,A3テーブル共にStockNoというフィールドが存在している と思います。 そこで、3行目で、A1.*, A3.* としているので S1というデーぶるには、A1,A3テーブルの全フィールドと していますが、StockNoフィールドがどちらにも入っているので どちらを適用してよいかわからず、エラーになっていると思います。 なので、3行目を必要なものだけに書き換えては、いかがでしょうか? A1.StockNo,A3.hoge1,A3.hoge2・・・・・ 私も、試す環境がありませんので、予想だけですが・・・

virgin_steele
質問者

お礼

回答ありがとうございます。 ご教示頂いた内容で解決する事が出来ました。 エラー文を冷静に読めば判りそうな原因でしたね…。 以後気をつけます。 本当にありがとうございました。

その他の回答 (1)

回答No.1

環境がないので、試してはいませんが、 03-  SELECT A1.*, A3.* FROM 04-   ( 05-    SELECT A2.* FROM stock AS A2 06-    WHERE A2.StockDay < #日付#  '【SQLserverで流す時は "CONVERT(DATETIME, '日付')"】 07-    AND A2.ShopCode = '店番号' 08-   ) AS A1 09-  LEFT JOIN tag AS A3 10-  ON A1.StockNo = A3.StockNo これだけでは、エラーになってしまうのですか?

virgin_steele
質問者

補足

早速の回答ありがとうございます。 書き忘れていましたが、01,02,11の行を外すとエラーにはなりません。 しかし、これはこの後に別の式"S2"とJOINする必要があるために付けています。 S1と別名をつけるのは諦めなければならないでしょうか…?

関連するQ&A

専門家に質問してみよう