繁体   English   中英

SQL有效地选择值,该值在另一个表中有记录

[英]SQL efficiently select values where that value has a record in another table

有一个表users ,其字段为fbidfcmtoken 然后有一个表中的friends ,其字段为fbidfriendfbid 因此,在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 = ?
SELECT a.friendfbid, b.fcmtoken from friends a, users b where a.fbid = b.fbid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM