Избегайте SQL, ГДЕ НЕ НАХОДИТСЯ - PullRequest
2 голосов
/ 06 ноября 2011

У меня есть 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 Ответ

2 голосов
/ 06 ноября 2011

Попробуйте это:

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
...