簡體   English   中英

使用IN和子查詢進行MYSQL更新

[英]MYSQL UPDATE with IN and Subquery

嗨我有這樣的表:

表格條目:

id | TOTAL_COMMENTS
_____________________
1 | 0
2 | 0
3 | 0
4 | 0

表評論:

id | 開齋節 評論
_____________________
1 | 1 | 評論sdfd
2 | 1 | 測試測試
3 | 1 | 評論文本
4 | 2 | 假評論
5 | 2 | 樣品評論
6 | 1 | fg fgh dfh

我寫的查詢:

UPDATE entry 
   SET total_comments = total_comments + 1 
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))

我得到的結果是:

表格條目:

id | TOTAL_COMMENTS
_____________________
1 | 1
2 | 1
3 | 0
4 | 0

預期成績 :

表格條目:

id | TOTAL_COMMENTS
_____________________
1 | 4
2 | 2
3 | 0
4 | 0

任何幫助將不勝感激。

使用:

UPDATE entry 
   SET total_comments = (SELECT COUNT(*)
                           FROM COMMENTS c
                          WHERE c.eid = id
                       GROUP BY c.eid)
 WHERE id IN ( SELECT eid 
                 FROM comments 
                WHERE id IN (1,2,3,4,5,6))

如果你真的需要在一個單獨的表中使用total_comments,我會把它作為一個VIEW。

CREATE VIEW entry AS 
  SELECT id, COUNT(comments) AS total_comment 
  FROM comments 
  GROUP BY id

這樣就可以避免完全更新total_comments表的維護任務。

這正是我所期待的。 id是你給它的集合,所以total_comments = total_comments + 1。

它不會為每個具有相同值的實例添加一個:這不是IN的工作方式。 IN將返回一個簡單的布爾值yes / no。

嘗試:

UPDATE entry
  SET total_comments = (SELECT COUNT(*) 
                        FROM comments
                        WHERE entry.id = comments.eid
                        GROUP BY id)
UPDATE entry e 
    SET total_comments = ( SELECT COUNT(*) FROM comments WHERE eid = e.id)  
    WHERE 
    e.id in (SELECT eid FROM comments WHERE id IN (1,2,3,4,5,6))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM