0

各レコードにフィールドがあるニュース テーブルがあります。

news_id (INT), parent_id (INT) , subitems (INT)

各レコードにその直接の子の合計 (カウント) を持たせたい

例(結果をそのようにしたい)

news_id: 1, parent_id: 0, subitems: 2

news_id: 2, parent_id: 1 , subitems: 0

news_id: 3, parent_id: 1 , subitems: 0

このようなことを正しく行うにはどうすればよいですか:

UPDATE news n 
SET subitems = (SELECT COUNT(*) FROM `news` AS `n2` 
WHERE `n2`.`parent_id` = `n`.`news_id`)

上記のように、次のエラーが発生します。

#1093 - You can't specify target table 'n' for update in FROM clause
4

1 に答える 1

0

これが私がそれを解決した方法です:

注意: これはパフォーマンスの点で醜いです。一度だけ実行しても問題ありませんが、継続的な操作では問題ありません。

UPDATE news n 
SET subitems = (SELECT COUNT(*) 
FROM (SELECT parent_id FROM `news` AS `n2` 
WHERE `n2`.`parent_id` <> '0') AS n3 WHERE n3.parent_id = n.news_id)
WHERE n.parent_id = '0'
于 2013-02-22T15:05:32.483 に答える