そんなに数は多くないのですが、
UPDATE shop SET pay = true WHERE id = 2289 AND id = 2291 AND id = 2292 AND id = 2348 AND id = 2604
こんなカンジで特定のIDのデータを一括修正したいのですが、エラーは返ってこないものの、なぜかFALSE(0)と値が入ってしまいます。この書き方の何がいけないのでしょうか
id が 2289 であり2291でもあり2291でもあり2348でもあり2604でもある場合のみ、そのレコードのpayをtrueに変更するという命令になっていますので、そんなレコードはないという返事になっています
この場合はORを使います
UPDATE shop SET pay = true WHERE id = 2289 OR id = 2291 OR id = 2292 OR id = 2348 OR id = 2604
INを使うとスッキリします
UPDATE shop SET pay = true WHERE id IN (2289, 2291, 2292, 2348, 2604)
id が 2289 であり2291でもあり2291でもあり2348でもあり2604でもある場合のみ、そのレコードのpayをtrueに変更するという命令になっていますので、そんなレコードはないという返事になっています
この場合はORを使います
UPDATE shop SET pay = true WHERE id = 2289 OR id = 2291 OR id = 2292 OR id = 2348 OR id = 2604
INを使うとスッキリします
UPDATE shop SET pay = true WHERE id IN (2289, 2291, 2292, 2348, 2604)
windofjulyさん!いつもありがとうございます!ばっちりでした!
UPDATE する対象が抽出されませんからねぇ。
UPDATEの代わりにSELECT とすれば UPDATEされるレコードが わかります。
つまり
UPDATE shop SET pay = true WHERE id = 2289 AND id = 2291 AND id = 2292 AND id = 2348 AND id = 2604
↓
SELECT pay FROM shop WHERE id = 2289 AND id = 2291 AND id = 2292 AND id = 2348 AND id = 2604
で 上記の場合、通常は inとか使います。
なので
UPDATE shop SET pay = true WHERE id in (2289,2291,2292,2348,2604)
とすればいいでしょう。
AND じゃなくて OR でないですか?
AND では
id が 2289 で、且つ id が 2291 で、且つ id が 2292 で、且つ id が 2348 で、且つ id が 2604
という意味に・・・
その通りでした!
windofjulyさん!いつもありがとうございます!ばっちりでした!