dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
SQLを学んで3ヶ月の初心者です。
下記の内容でご理解いただけ、分かる方がいましたら教えていただけないでしょうか。
一応、自分なりに以下作成したのですが、結果が反映されなく困っています。
よろしくお願い致します。

※質問内容※
・条件に従い、Aテーブルから必要な項目を抜き出し、Bワークテーブルを作成する。
・@・・・頭で宣言しています。


delete from Bワークテーブル
insert into Bワークテーブル
(
ID,
CD,
伝票番号,
部門CD,
引当日,
ユーザID,
)
select Aテーブル
 Cテーブル.ID,
 Aテーブル.CD,
 Aテーブル.伝票番号,
 Aテーブル.部門CD,
 Aテーブル.引当日,
 Aテーブル.ユーザID,
from Aテーブル
INNER JOIN Cテーブル
ON Cテーブル.ID = @ID
where Aテーブル.CD = @CD
and ((Aテーブル.伝票番号 >= @伝票番号FROM) OR (@伝票番番号FROM IS NULL))
and ((Aテーブル.伝票番号 <= @伝票番号TO) OR (@伝票番号TO IS NULL))

以上。

A 回答 (1件)

「反映されない」が「クエリ自体がエラーになる」という意味であれば


・select 直後の「Aテーブル」の記載
・「@伝票番番号FROM」
・「ユーザID」が最後の列なのに後ろにカンマがついている
正直これらは質問するときの打ち間違いなのか、ソースもそうなっているのか、全く判別ができません。

「反映されない」が「0行処理されました」と表示されるという意味であれば、
要は対象データがヒットしないということで、
・@IDがCテーブルのIDに存在しない
・@CDがAテーブルのCDに存在しない
・@伝票番号FROM~@伝票番号TOの間にあるAテーブルの伝票番号が存在しない
(@IDや@CDをセットしたつもりでも、実はセットされてないとかも含む)
のいずれかだと思います。

後者の場合、
--delete from Bワークテーブル
--insert into Bワークテーブル
--(
--ID,
--CD,
--伝票番号,
--部門CD,
--引当日,
--ユーザID
--)
select
 Cテーブル.ID,
 Aテーブル.CD,
 Aテーブル.伝票番号,
 Aテーブル.部門CD,
 Aテーブル.引当日,
 Aテーブル.ユーザID
from Aテーブル
INNER JOIN Cテーブル
ON Cテーブル.ID = @ID
--where Aテーブル.CD = @CD
--and ((Aテーブル.伝票番号 >= @伝票番号FROM) OR (@伝票番番号FROM IS NULL))
--and ((Aテーブル.伝票番号 <= @伝票番号TO) OR (@伝票番号TO IS NULL))

のように条件指定部分やINSERT部分をコメントアウトして、単なるSELECT文として結果が返るか調べ、
あとは徐々に条件指定を増やしてチェックするのが一般的です。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。

後者のように、0件で返ってきてしまうのです。

まだ時間があるので、ご指摘の様な方法で確認してみることにします。

ありがとうございますした!

お礼日時:2009/12/24 14:41

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