高效查询 - 查询表 A 中的特定 ID 组时,如何检查表 B 中的条件以查找表 A 中的选定 ID?

Posted

技术标签:

【中文标题】高效查询 - 查询表 A 中的特定 ID 组时,如何检查表 B 中的条件以查找表 A 中的选定 ID?【英文标题】: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? 【发布时间】: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循环或子查询的有效方法?

任何答案将不胜感激。

谢谢。

【问题讨论】:

【参考方案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', ...)

【讨论】:

以上是关于高效查询 - 查询表 A 中的特定 ID 组时,如何检查表 B 中的条件以查找表 A 中的选定 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如题:如何用一条SQL语句按输入的参数进行判断执行查询数据

下面的SQL查询是否高效?

下面的SQL查询是否高效?

如何从事务中的特定查询中检索 last_insert_id?

高效的 MySql 查询 [重复]

使用子查询高效获取核心数据