0

次のクエリを修正するにはどうすればよいですか? SELECT クエリの結果をテーブルにエイリアスしようとしてもうまくいきtmpません。

INSERT INTO vote_counts (list_id, node_id, num_down_votes) 
  (SELECT vl.list_id, vl.node_id, COUNT(*) AS c
    FROM vote_logs vl 
   WHERE vl.node_id=2442703 AND vl.agree_type='DOWN_VOTE' 
GROUP BY vl.list_id) tmp
ON DUPLICATE KEY UPDATE num_down_votes = tmp.c;

テーブルにはvote_countsにユニーク キー制約があり(list_id, node_id)ます。

4

1 に答える 1

5

私が間違っていなければ、これはうまくいくはずです:

INSERT INTO vote_counts (list_id, node_id, num_down_votes) 
SELECT vl.list_id, vl.node_id, COUNT(*) AS c
FROM vote_logs vl 
WHERE vl.node_id=2442703 AND vl.agree_type='DOWN_VOTE' 
GROUP BY vl.list_id
ON DUPLICATE KEY UPDATE num_down_votes = vl.c;

vl.c動作しない場合はCount(vl.*)、エイリアスであるため、使用する必要がある場合があります-確かではありません。テストする必要があります。

- 編集

おそらく a を使用すると、subqueryこの問題が解決します。

INSERT INTO vote_counts (list_id, node_id, num_down_votes) 
SELECT list_id, node_id, c
FROM (
    SELECT vl.list_id, vl.node_id, COUNT(*) AS c
    FROM vote_logs vl 
    WHERE vl.node_id=2442703 AND vl.agree_type='DOWN_VOTE' 
    GROUP BY vl.list_id
) tempTable
ON DUPLICATE KEY UPDATE num_down_votes = tempTable.c;

幸運を。

于 2013-01-26T02:34:00.593 に答える