プロが教えるわが家の防犯対策術!

現在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テーブルのフィールドも結果に含みたいです。


どなたか原因や回避方法をご存知の方いらっしゃいましたら、
お手数ですが是非ともご教示頂きたいです。
よろしくお願い致します。

A 回答 (2件)

10行目を見るとStockNo でA1,A3共に結合しているので、


A1,A3テーブル共にStockNoというフィールドが存在している
と思います。

そこで、3行目で、A1.*, A3.* としているので
S1というデーぶるには、A1,A3テーブルの全フィールドと
していますが、StockNoフィールドがどちらにも入っているので
どちらを適用してよいかわからず、エラーになっていると思います。

なので、3行目を必要なものだけに書き換えては、いかがでしょうか?
A1.StockNo,A3.hoge1,A3.hoge2・・・・・

私も、試す環境がありませんので、予想だけですが・・・
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/11/13 15:40

環境がないので、試してはいませんが、



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と別名をつけるのは諦めなければならないでしょうか…?

補足日時:2006/11/13 15:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A