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 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', ...)

これは、関係テーブルに重複がないことを前提としています。

于 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 に答える