- ベストアンサー
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テーブルのフィールドも結果に含みたいです。 どなたか原因や回避方法をご存知の方いらっしゃいましたら、 お手数ですが是非ともご教示頂きたいです。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
10行目を見るとStockNo でA1,A3共に結合しているので、 A1,A3テーブル共にStockNoというフィールドが存在している と思います。 そこで、3行目で、A1.*, A3.* としているので S1というデーぶるには、A1,A3テーブルの全フィールドと していますが、StockNoフィールドがどちらにも入っているので どちらを適用してよいかわからず、エラーになっていると思います。 なので、3行目を必要なものだけに書き換えては、いかがでしょうか? A1.StockNo,A3.hoge1,A3.hoge2・・・・・ 私も、試す環境がありませんので、予想だけですが・・・
その他の回答 (1)
- kamohura_01
- ベストアンサー率54% (6/11)
環境がないので、試してはいませんが、 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 これだけでは、エラーになってしまうのですか?
補足
早速の回答ありがとうございます。 書き忘れていましたが、01,02,11の行を外すとエラーにはなりません。 しかし、これはこの後に別の式"S2"とJOINする必要があるために付けています。 S1と別名をつけるのは諦めなければならないでしょうか…?
お礼
回答ありがとうございます。 ご教示頂いた内容で解決する事が出来ました。 エラー文を冷静に読めば判りそうな原因でしたね…。 以後気をつけます。 本当にありがとうございました。