VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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 (日付型)をわざわざ文字列に変換する必要はないのでは?

説明が下手なので分かりにくいかと思いますが、
分からなかったら再度質問して下さい。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -