1

このようなテーブルがあります。

(BIGINT)     (BIGINT)
PLAYER_ID    FRIEND_ID
----------------------
1            2
2            1
1            3

ビューを次のように作成できると思います

SELECT * FROM FRIEND F1 LEFT OUTER JOIN FRIEND F2 ON F1.FRIEND_ID = F2.PLAYER_ID

印刷

F1.PLAYER_ID    F1.FRIEND_ID    F2.PLAYER_ID    F2.FRIEND_ID
[BIGINT]        [BIGINT]        [BIGINT]        [BIGINT]
------------------------------------------------------------
1               2               2               1
2               1               1               2
1               3               NULL            NULL

それらの F2 の存在を表すビューを AS BIT にすることはできますか?

F1.PLAYER_ID    F1.FRIEND_ID    BACK
[BIGINT]        [BIGINT]        [BIT]
-------------------------------------
1               2               1     // exist (1 -> 2)
2               1               1     // exist (2 -> 1)
1               3               0     // no backing relation (3 -> 1)

アップデート - - - - - - - - - - - - - - - - - - - - - - - - - -----------------

申し訳ありませんが、上記のクエリは完璧ではありません。

@Romil の回答を含むクエリは、次のように記述する必要があります。

SELECT
    F1.PLAYER_ID,
    F1.FRIEND_ID,
    CASE WHEN F2.FRIEND_ID IS NULL THEN 0 ELSE 1 END AS BACK
FROM FRIEND F1
    LEFT OUTER JOIN FRIEND F2
        ON F1.FRIEND_ID = F2.PLAYER_ID AND F1.PLAYER_ID = F2.FRIEND_ID
4

3 に答える 3

3
SELECT *, EXISTS (SELECT * FROM FRIEND WHERE PLAYER_ID = F1.FRIEND_ID) AS BACK
FROM   FRIEND AS F1

sqlfiddleで参照してください。

于 2012-06-12T10:15:19.780 に答える
2
SELECT F1.PLAYER_ID, 
       F2.PLAYER_ID, 
       CASE 
         WHEN F2.PLAYER_ID IS NULL THEN 0 
         ELSE 1 
       end AS Back 
FROM   FRIEND F1 
       LEFT OUTER JOIN FRIEND F2 
                    ON F1.FRIEND_ID = F2.PLAYER_ID 
于 2012-06-12T10:15:11.497 に答える
1

あなたはの線に沿って何かを試すことができます

SELECT F1.*, if(F1.FRIEND_ID = F2.PLAYER_ID,1,0) FROM FRIEND F1 LEFT JOIN FRIEND F2 ON F1.FRIEND_ID = F2.PLAYER_ID
于 2012-06-12T10:17:27.983 に答える