投稿日 | : 2002/09/04(Wed) 10:54 |
投稿者 | : とろ |
Eメール | : |
URL | : |
タイトル | : Re^4: VB SQLで アクセステーブルを操作する |
update の方に関して、
() の位置が違います。
それ以外は大丈夫でしょう。
insert の方に関して、
まず、 B.b1, C.c1 は主キーとして考えて良いですよね?
> insert into B (b1,b2,b3)
> select C.c1, 31 - day(C.c2), A.a2
> from A, B inner join C on B.b1 = C.c1
> where format(C.c2, 'yyyy/mm/dd') between '2001/05/01' and '2001/05/31'
> and B.b1 is null
・大きな問題点1
恐らく、"B.b1 is null" の条件によって、
B に存在しないと判断していると思うのですが、
inner join (内部結合)を使っているので、
そもそも、 "B.b1 is null" のレコードは抽出されません。
やるならば、外部結合を使用して下さい。
# それ以前に、 B に存在する場合は、 update の方に行って、
# insert の方には来ないように、なっているのでは?
・大きな問題点2
B と C との結合キーは記述されていますが、
A との結合キーが記述されていません。
・どうでもいい点
C.c2 (日付型)をわざわざ文字列に変換する必要はないのでは?
説明が下手なので分かりにくいかと思いますが、
分からなかったら再度質問して下さい。