[前][次][番号順一覧][スレッド一覧]

mysql:14964

From: chuuken kenkou <chuuken kenkou <ken_ken_1962@xxxxxxxxxx>>
Date: Mon, 6 Jul 2009 23:50:28 +0900
Subject: [mysql 14964] Re: 複雑なdeleteの書き方


chuukenです。

提示されてデータに誤りがあるのでしょうかね?
検索条件で対象になるのは、id=3の行であり、削除対象になるのはuser_id=2に

なるのでは?

他にも提示内容に、次のような誤りや適切かどうか?があるので、一応、念のため。

(1)表定義のunique指定中のmember_idが、列定義にない
(2)date型のcreated列と日時が返るnow関数での比較は妥当な処理?
(3)intarval → inerval


MySQLでは、updateやdeleteの検索条件で、サブクエリした表そのものを更新
したり、削除したりできないという制限があります。
この制限を回避するには、MySQLの独自機能の「複数表のupdate、delete」を
利用するといった方法が考えられます。

例えば、こんな感じです。

delete t1
 from t1,(select distinct user_id
           from t1
           where page_id=1
             and created + interval 7 day> current_date) as x
 where t1.user_id=x.user_id






----------------------------------------
> Date: Mon, 6 Jul 2009 18:14:39 +0900
> From: shu@xxxxxxxxxx
> Subject: [mysql 14963] Re: 複雑なdeleteの書き方
> To: ml@xxxxxxxxxx
>
> 柳本さん
>
> ありがとうございます。
> ERROR 1093 (HY000):You can't specify target table 'test' for update in
> FROM clause
> となっております。
> サブクエリは無理!といわれているっぽいです。
> 1文では不可能なのでしょうか?
> 無理な場合はストアドかPerlなどのプログラムから実行します。
>
>> 柳本です。
>>
>> delete from [テーブル名]
>> where user_id in (
>> select user_id from [テーブル名]
>> where page_id = 1
>> and created + cast('7 days' as interval)> now()
>> )
>>
>> こうですか?わかりません><
>>
>> tysmk さんは書きました:
>>> お世話になっております。
>>>
>>> 以下のようなテーブルがあったと仮定します。
>>>
>>> id int auto_increment,
>>> user_id int,
>>> page_id int,
>>> created date,
>>> primary key(id),
>>> unique key(user_id,member_id,page_id)
>>>
>>> このテーブルから
>>> page_id=1 and created+ intarval 7 day> now()
>>> がtrueの場合、該当するuser_idのすべてを削除したいのですがどのように書け
>>> ばいいでしょうか?
>>>
>>> わかりやすく書くと舌のようにデータが入っていた場合、消えるのは
>>> id = 1 and id = 4
>>> になります。
>>>
>>> id user_id page_id created
>>> 1 1 1 2009-06-15
>>> 2 2 3 2009-07-05
>>> 3 2 1 2009-07-05
>>> 4 1 2 2009-07-05
>>>
>>>
>>> ご教示お願いいたします。
>>>
>>
>>
>>
>>
>
>

_________________________________________________________________
無料で使える25GB。USBメモリの代わりに、Webに保存
http://clk.atdmt.com/GBL/go/153787332/direct/01/

[前][次][番号順一覧][スレッド一覧]

     14954 2009-07-06 16:45 [tysmk <shu@xxxxxxxxx] 複雑なdeleteの書き方                    
     14955 2009-07-06 16:57 ┣[<y-iida@xxxxxxxxxx> ]                                       
     14958 2009-07-06 17:15 ┃┗[tysmk <shu@xxxxxxxxx]                                     
     14957 2009-07-06 17:12 ┣[Yoshiaki Yanagimoto ]                                       
     14963 2009-07-06 18:14 ┃┗[tysmk <shu@xxxxxxxxx]                                     
->   14964 2009-07-06 23:50 ┃ ┗[chuuken kenkou <ken_]                                   
     14965 2009-07-07 11:37 ┃  ┗["Kaname Kuji\(Y7\)" ]                                 
     14959 2009-07-06 17:42 ┣[Katsutoshi Nakatomi ]                                       
     14961 2009-07-06 17:57 ┃┗[tysmk <shu@xxxxxxxxx]                                     
     14962 2009-07-06 18:09 ┃ ┗[Katsutoshi Nakatomi ]                                   
     14966 2009-07-07 12:41 ┗["N.K." <nakai.kanako]