アプリ版:「スタンプのみでお礼する」機能のリリースについて

データベースの初心者です。MySQLを使用してSQL文を試しましたが、うまくいきません。
わかりやすく教えていただけますか?

下のような2つのテーブルで、テーブル2の項目カラムに存在するデータが、
テーブル1の区分にあれば、一致する行(NOカラムの5~7)だけに、
フラグ”1”を付けたいのです。(区分カラムに、"*"で始まるデータは除きます)

区分に、データが全て埋まっていれば簡単に出来るのですが、
先頭行のみデータがあって、次の区分まで、Nullが入っています。


テーブル1
NO 区分 フラグ
1  aaaaa   null
2  null     null
3  null     null
4  null     null
5  bbbbb   null
6  null     null
7  *nozoku  null
8  ccccc null
9  null null

テーブル2
NO 項目
1  bbbbb
2  eeeee


よろしくお願いします。

A 回答 (2件)

ああ、なんとなくわかりました



>NULLの場所に、aaaaa、bbbbb、cccccを挿入する方法も分からないため、

ということはnullを置き換えてよろしいのでしょうか?
であれば、以下のようなupdateをしてみるとよいかもしれません

//元データ
create table tbl1(no int,kubun varchar(20) null,flg tinyint null);
insert into tbl1 (no,kubun) values(1,'aaaaa'),(2,null),(3,null),(4,null),(5,'bbbbb'),(6,null),(7,'*nozoku'),(8,'ccccc'),(9,null);
create table tbl2(no int,komoku varchar(20));
insert into tbl2 values(1,'bbbbb'),(2,'eeeee');

//nullや*で始まる区分を置き換える
update tbl1 set kubun=if(kubun is null or kubun like '*%',@a,@a:=kubun) order by no;

//tbl2の項目と合致するtbl1のフラグをたてる
update tbl1 inner join tbl2 on tbl1.kubun=tbl2.komoku set tbl1.flg=1;
    • good
    • 0
この回答へのお礼

やっと解決しました!

ご回答ありがとうございました。

お礼日時:2013/09/24 14:12

質問が意味不明



>テーブル1の区分にあれば、一致する行(NOカラムの5~7)

たしかに5行目は「bbbbb」で一致しますが、6行目や7行目がどうして一致する行なのでしょう?
また8行目以降がなぜ一致しない行なのでしょう?
「eeeee」の立場はどうなっているのでしょう?

この回答への補足

説明不足で、ごめんなさいm(__)m
また、お返事が遅くなり、スミマセン。

テーブル1の区分には、NULLが入っていますが、
本当は、NOカラムの2~4には、aaaaaが入り、
6~7には、bbbbbが入り、9には、cccccが入ります。

データベースに情報が入力された時点で、先頭行にしか情報がありません。

テーブル2のeeeeeは、テーブル1に存在しないため、無視してください。

NULLの場所に、aaaaa、bbbbb、cccccを挿入する方法も分からないため、
私なりに考えて、テーブル2と一致する5に、フラグを付けて、
次の区分cccccが来るまで、6~7にフラグをつけたいと思いました。

でも、SQLで思い通りに動かないんです。どうすれば、良いのでしょうか?
他の方法も含めて、アドバイスよろしくお願いいたします。

補足日時:2013/09/20 09:05
    • good
    • 0

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