有一个表users
,其中包含字段fbid
和fcmtoken
。然后有一个表 friends
,其中包含字段 fbid
和 friendfbid
。因此,在 friends
表中,要获取我所有的 friend ,必须这样做(只是为了帮助您理解这个想法):
SELECT friendfbid FROM friends WHERE fbid = MYFBID
我需要进行查询以获取我 friend 的所有 fcmtoken。我这样做了,它似乎有效:
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 = ?
关于mysql - SQL 有效地选择该值在另一个表中具有记录的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39063632/