有一个表users,其中包含字段fbidfcmtoken。然后是具有字段friendsfbid的表friendfbid。因此,在friends表中,要吸引我的所有朋友,就必须这样做(只是为了帮助您理解这个想法):

SELECT friendfbid FROM friends WHERE fbid = MYFBID


我需要查询以获取所有朋友的fcmtokens。我是这样做的,它似乎可以工作:

SELECT
    fbid,
    fcmtoken
FROM
    users
WHERE
    EXISTS (
        SELECT
            friendfbid
        FROM
            friends
        WHERE
            fbid = ?
        AND friendfbid = users.fbid
    )


它足够有效吗?似乎创建了很多选择查询,所以让我考虑了一下。

最佳答案

尝试将WHERE fbid = ?移动到外部查询中:

SELECT
    fbid,
    fcmtoken
FROM
    users
WHERE fbid = ?
AND EXISTS (
        SELECT
            *
        FROM
            friends
        WHERE
            friendfbid = users.fbid
    )


但是联接可能会更有效:

SELECT
    u.fbid,
    u.fcmtoken
FROM users AS u
JOIN friends AS f
  ON f.friendfbid = u.fbid
WHERE f.friendfbid = ?

10-01 00:38