MYSQL UPDATE with IN and Subquery

前端 未结 5 1101
余生分开走
余生分开走 2020-12-30 09:18

Hi i have tables like this :

table entry :

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

相关标签:
5条回答
  • 2020-12-30 10:03

    Use:

    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))
    
    0 讨论(0)
  • 2020-12-30 10:04
    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))
    
    0 讨论(0)
  • 2020-12-30 10:09

    If you really need total_comments in a separate table, I would make that a VIEW.

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

    This way you avoid the maintenance task of updating the total_comments table altogether.

    0 讨论(0)
  • 2020-12-30 10:19

    That's exactly what I'd expect. The id is IN the set you give it, so total_comments = total_comments + 1.

    It's not going to add one for each instance of the same value: that's not how IN works. IN will return a simple boolean yes/no.

    0 讨论(0)
  • 2020-12-30 10:19

    Try:

    UPDATE entry
      SET total_comments = (SELECT COUNT(*) 
                            FROM comments
                            WHERE entry.id = comments.eid
                            GROUP BY id)
    
    0 讨论(0)
提交回复
热议问题