0

我有一张用户表:| 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循环或子查询,有什么有效的方法吗?

任何答案将不胜感激。

谢谢。

4

2 回答 2

0

从您的描述中您想要什么并不完全清楚。这个查询给出了所有选择的用户和一个标志来说明他们是否被关注。如果您只想要当前用户关注的用户,请更改left outer joininner 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', ...)

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

于 2013-10-25T22:59:20.227 回答
0

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

    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', ...)
于 2013-10-25T23:19:33.273 回答