【问题标题】:How to select data from table on the basis of other如何在其他的基础上从表中选择数据
【发布时间】:2018-05-22 12:23:50
【问题描述】:

我有 2 张桌子 T1 和 T2。这里 T1 包含博客,T2 包含喜欢帖子的用户列表。

T1 数据库架构 post_id,post

T2 数据库架构 post_id,user_id

我只想选择那些至少有 10 位用户喜欢的帖子。

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT T1.post_id, T1.post, COUNT(T2.user_id]) as Total
    FROM T1 JOIN T2 ON T1.post_id = T2.post_id 
    GROUP BY T1.post_id, T1.post 
    HAVING Total >= 10
    

    【讨论】:

      【解决方案2】:

      您可以对您的选择进行分组,然后使用having

      SELECT posts.*, COUNT(likes.id) as likesCount
      FROM posts, likes
      GROUP BY posts.id HAVING (likesCount >= 10)
      

      【讨论】:

        【解决方案3】:

        在表 T2 中,出现超过 10 的 post_id 是您想要的帖子,因此您可以选择在表 T2 中至少出现 10 行 post_id 的帖子

        【讨论】:

        • 你能详细说明一下吗
        • select post_id from T2 Group by post_id with count>=10 然后您可以使用此查询中的 post_id 从 T1 中选择这些帖子 这不是确切的查询,但您将查询写的会和这个有点相似。
        【解决方案4】:

        你可以使用子选择吗?

        SELECT post_id,COUNT(post_id) AS count,
        (SELECT post FROM T1 where post_id=T2.post_id) AS post
        GROUP BY post_id
        HAVING count >= 10
        

        【讨论】:

          【解决方案5】:

          为了获得最佳性能并避免“笛卡尔积”使用join,如下所示:

          SELECT p.post_id, COUNT(l.user_id) AS TotalLikesCount
          FROM posts AS p
          JOIN likes AS l ON p.post_id = l.post_id
          GROUP BY p.post_id
          HAVING TotalLikesCount >= 10
          

          【讨论】:

            【解决方案6】:

            您可以使用加入来选择帖子。

            SELECT p.post_id, p.post, count(pl.user_id) as likes 
            FROM `post` as p
            join post_likes as pl on p.post_id = pl.post_id
            
            where 1 group by pl.post_id
            having likes >= 10;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-02-20
              • 1970-01-01
              • 1970-01-01
              • 2011-06-05
              • 1970-01-01
              • 2014-11-10
              • 2017-09-17
              • 1970-01-01
              相关资源
              最近更新 更多