mysql - SQL 有效地选择该值在另一个表中具有记录的值

标签 mysql sql join where-in

有一个表users,其中包含字段fbidfcmtoken。然后有一个表 friends,其中包含字段 fbidfriendfbid。因此,在 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/

相关文章:

php - 无法从选项值获取 html 数据

mysql - SQL-按特定字段分组并连接另一个字段

MySQL 建表错误 #1005

sql - 如何将表与列表交叉连接?

MySQL 从服务器备份数据库片段

php - Mysql 查询将返回数据库中时间戳之间的空闲槽

Sql Select Statement Issue in order by

mysql - 在 Mysql 上连接多个表

r - 条件连接数据帧 R

iphone - 如何从Objective-C调用SQL存储过程?