sql - 帮助优化子查询

标签 sql mysql optimization subquery

此查询获取与其他新闻文章类似标记的新闻文章。我是否可以消除其中一个我没有看到的子查询?

SELECT id, 
       title, 
       comment_count
  FROM NEWS
 WHERE (franchise_id = 1 OR franchise_id = 0)
   AND draft = 0
   AND id != 459
   AND id IN (SELECT news_id
                FROM news_tag_association
               WHERE tag_id IN (SELECT tag_id
                                  FROM news_tag_association
                                 WHERE news_id = 459))                               
 LIMIT 0, 5;

最佳答案

是的,没有 GROUP BY 或类似的东西,所以你可以使用普通的自连接:

SELECT
    id, title, comment_count
FROM news
JOIN news_tag_association n2t1 ON (news.id = n2t1.news_id)
JOIN news_tag_association n2t2 ON (n2t1.tag_id = n2t2.tag_id)
WHERE franchise_id IN (0, 1)
    AND draft = 0
    AND id != 459
    AND n2t2.news_id = 459
LIMIT 0,5;

关于sql - 帮助优化子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4116526/

相关文章:

PHP PDO 更新多条记录而不是一条记录

php - 从 php 插入 mysql 将日期字段保存为 00 :00:00 instead of NULL

mysql - SQL如何编写查询以检索最新帖子

mysql - 我的大型 mysql 表注定要失败吗?

sql - 从 SQL Server 2008 中的所有表中选择所有列

c# - 支持用户定义的数据库字段的动态类

c# - linq to sql 选择作为命令

php - 如何修复 Laravel 5.7 中的 "Invalid datetime format: 1366 Incorrect integer value: "错误?

HTTP请求优化: What is the limit?

java - 如何使用递归检查数组中的所有值是否相等?