我有一个使用子查询的简单查询:
SELECT pictures.*
FROM pictures
WHERE pictures.user_id IN
(SELECT follows.following_id
FROM follows
WHERE follows.follower_id = 9)
ORDER BY created_at DESC LIMIT 5;
我在想, a)如何删除子查询并使用JOINS而b)使用JOINS而不是子查询会有性能优势吗?
(follow.following_id,follow.follower_id,pictures.user_id都已编入索引)
由于
答案 0 :(得分:4)
SELECT DISTINCT pictures.*
FROM pictures
INNER JOIN follows
ON pictures.user_ID = follows.following_id
WHERE follows.follower_id = 9
ORDER BY pictures.created_at DESC
LIMIT 5
要进一步了解联接,请访问以下链接:
<强>更新强>
获得相同结果的另一种方法是使用EXISTS
SELECT *
FROM pictures
WHERE EXISTS
(
SELECT 1
FROM follows
WHERE pictures.user_ID = follows.following_id AND
follows.follower_id = 9
)
ORDER BY pictures.created_at DESC
LIMIT 5