【问题标题】:Efficient Query - When querying a specific group of IDs in Table A, how can I check a condition in Table B for selected id in Table A?高效查询 - 查询表 A 中的特定 ID 组时,如何检查表 B 中的条件以查找表 A 中的选定 ID?
【发布时间】:2013-10-25 22:25:12
【问题描述】:

我有一个用户表:| username |

我有一张关系表:| follower | following |

目前,我有一个查询:SELECT username FROM user WHERE username IN ('A', 'B', ...)

现在,当我执行上述查询时,我想检查当前用户是否正在关注每个用户,并以某种方式在结果的另一列中指出它。像这样:SELECT username, is_followed FROM user WHERE username IN ('A', 'B', ...) AND "is_followed is true when username is being followed by 'CURRENT_USERNAME'"

有没有没有foreach循环或子查询的有效方法?

任何答案将不胜感激。

谢谢。

【问题讨论】:

    标签: mysql sql database optimization query-optimization


    【解决方案1】:

    从您的描述中您想要什么并不完全清楚。这个查询给出了所有选择的用户和一个标志来说明他们是否被关注。如果您只想要当前用户关注的用户,请将left outer join 更改为inner join

    Select
        u.username,
        case when r.following is null then 0 else 1 end is_followed
    From
        user u
            left outer join
        relationship r
            on u.username = r.following and r.follower = 'CURRENT_USERNAME'
    Where
        u.username in ('A', 'B', ...)
    

    这假定关系表中没有重复项。

    【讨论】:

      【解决方案2】:

      这个给出了你解释的结果。

          SELECT  username
                  ,Case   When q2.username IS NULL 
                          Then 0 
                          Else 1 
                  END 
                  As is_followed
          FROM user q1
          LEFT JOIN 
          (
              select Distinct following as username
              from relationships
              where follower = 'CURRENT_USERNAME'
          )q2
          on q1.username=q2.username
          WHERE q1.username IN ('A', 'B', ...)
      

      【讨论】:

        猜你喜欢
        • 2010-12-05
        • 2013-02-13
        • 2011-06-25
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 2023-02-01
        相关资源
        最近更新 更多