避免SQL WHERE NOT IN Clause

时间:2011-11-06 15:21:27

标签: sql where-in

我在下面列出了3个表:

Blog    BlogArticle  Article
----    -----------  -------
        id
id------blog_id      -id
title   article_id__/ title

这个SQL描述了我想要的东西:

SELECT * 
FROM  `article` 
WHERE  `article`.`id` NOT IN (
        SELECT CONCAT(`blog_article`.`article_id`) 
        FROM  `blog_article` 
        WHERE  `blog_article`.`blog_id` = 1 -- example value
       )

问题是,在这种情况下我有一个很大的NOT IN值,据我所知它会影响服务器性能(我不确定,因为我从来没有尝试过基准测试或谷歌它)。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

试试这个:

SELECT * 
FROM  `article` 
LEFT JOIN `blog_article` ON CONCAT(`blog_article`.`article_id`) = `article`.`id`
                            AND  `blog_article`.`blog_id` = 1 -- example value
WHERE `blog_article`.`article_id` is null --replace the not in