SQL 有效 select 值,其中该值在另一个 table 中有记录
SQL efficiently select values where that value has a record in another table
有一个 table users
,字段为 fbid
和 fcmtoken
。然后是 table friends
字段 fbid
和 friendfbid
。所以在 friends
table 中,要得到我所有的朋友,就必须这样做(只是为了帮助你理解这个想法):
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
)
是否足够高效?它似乎创建了很多 select 查询,所以让我考虑一下。
SELECT a.friendfbid, b.fcmtoken from friends a, users b where a.fbid = b.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 = ?
有一个 table users
,字段为 fbid
和 fcmtoken
。然后是 table friends
字段 fbid
和 friendfbid
。所以在 friends
table 中,要得到我所有的朋友,就必须这样做(只是为了帮助你理解这个想法):
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
)
是否足够高效?它似乎创建了很多 select 查询,所以让我考虑一下。
SELECT a.friendfbid, b.fcmtoken from friends a, users b where a.fbid = b.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 = ?