私はこのようなテーブルを持っています(MySQL 5.0.x、MyISAM):
response{id, title, status, ...} (status: 1 new, 3 multi)
少なくとも20が同じタイトルを持っている場合、すべての応答のステータスをnew( status=1
)からmulti( )に更新したいと思います。status=3
私はこれを持っていますが、動作しません:
UPDATE response SET status = 3 WHERE status = 1 AND title IN (
SELECT title FROM (
SELECT DISTINCT(r.title) FROM response r WHERE EXISTS (
SELECT 1 FROM response spam WHERE spam.title = r.title LIMIT 20, 1)
)
as u)
ご注意ください:
- 有名なものを避けるためにネストされた選択を行います
You can't specify target table 'response' for update in FROM clause
GROUP BY
性能上の理由で使用できません。を使用したソリューションでのクエリコストLIMIT
ははるかに優れています(ただし、読みにくくなります)。
編集:
- MySQLでSELECTFROMUPDATEターゲットを実行することができます。ここで解決策を参照してください
- 問題は、選択されたデータにありますが、これは完全に間違っています。
私が見つけた唯一の解決策は、
GROUP BY
:を使用することです。UPDATE response SET status = 3 WHERE status = 1 AND title IN (SELECT title FROM (SELECT title FROM response GROUP BY title HAVING COUNT(1) >= 20)
派生応答として)
ご協力いただきありがとうございます!:)