有没有更好的方法来做这个MYSQL语句?

时间:2017-08-31 19:05:57

标签: mysql

此mysql语句获取未被用户标记的帖子。

就像现在一样,我收到了标记的帖子ID,然后没有在这组ID中获得帖子。

SELECT * FROM posts WHERE posts.id NOT IN 
(SELECT p2.id FROM posts p2 LEFT JOIN flagged_posts 
ON flagged_posts.user_id = ? WHERE flagged_posts.post_id = p2.id)

我觉得可能有更好(更快)的方式来做这件事,例如只有一个选择和一个连接,但我不确定

1 个答案:

答案 0 :(得分:0)

您可以使用条款EXISTS执行此操作。

SELECT * FROM posts 
WHERE 
   NOT EXISTS 
       (SELECT 1 
        FROM flagged_posts 
        WHERE flagged_posts.post_id=posts.post_id AND flagged_posts.user_id=?)

或者,您可以使用LEFT OUTER JOIN

执行此操作
SELECT * 
FROM posts
LEFT OUTER JOIN flagged_posts ON posts.post_id = flagged_posts.post_id 
AND flagged_posts.user_id=?
WHERE flagged_posts.post_id IS NULL