小编典典

避免在子句中不使用SQL

sql

我有下面列出的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值,据我所知它将影响服务器性能(我不确定,因为我从未尝试对其进行基准测试或Google评估)。有什么建议吗?


阅读 165

收藏
2021-04-07

共1个答案

小编典典

试试这个 :

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
2021-04-07