MySQL 子查询

标签 mysql optimization subquery

我们可以在没有子查询的情况下执行此查询吗?

SELECT login, post_n,

(SELECT SUM(vote) FROM votes WHERE votes.post_n=posts.post_n)AS votes, 
(SELECT COUNT(comments.post_n) FROM comments WHERE comments.post_n=posts.post_n)AS comments_count 

FROM users, posts 
WHERE posts.id=users.id AND (visibility=2 OR visibility=3) 
ORDER BY date DESC LIMIT 0, 15

表格:

用户:id,登录名

帖子:post_n、id、可见性

投票:post_n,投票

id — 它是用户 ID,Users 是主表。

最佳答案

是的,这是可能的:

SELECT login, post_n,

SUM(vote) as votes,

FROM users 
JOIN posts using(id)
LEFT JOIN votes using(post_n)
WHERE visibility=2 OR visibility=3 
GROUP BY login, post_n

然后压平结果:

select * from 
(
    SELECT login, post_n,

    SUM(vote) as votes,

    FROM users 
    LEFT JOIN posts using(id)
    LEFT JOIN votes using(post_n)
    WHERE visibility=2 OR visibility=3 
    GROUP BY login, post_n
) as votes_count

然后加入评论:

select votes_count.login, votes_count.post_n, votes_count.votes, 

    COUNT(comments.post_n) as comments_count

from 
(
    SELECT login, post_n,

    SUM(vote) as votes,

    FROM users 
    LEFT JOIN posts using(id)
    LEFT JOIN votes using(post_n)
    WHERE visibility=2 OR visibility=3 
    GROUP BY login, post_n
) as votes_count
LEFT JOIN comments using(post_n)
GROUP BY votes_count.login, votes_count.post_n
ORDER BY date DESC LIMIT 0, 15

关于MySQL 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788621/

相关文章:

php - 使用案例和子查询 MySql 更新多个表

mysql - SQL 子查询 WHERE 最后一个 id

php - 如何按数据库中的上一个日期排序?

php - 警告 : mysql_real_escape_string() [function. mysql-real-escape-string]:拒绝用户访问

matlab - 在 MATLAB 中将大型邻接矩阵转换为边列表的有效方法?

java - HackerEarth 问题 : Reverse Primes 内存不足错误

database - 为 Access 查询创建自定义聚合函数

mysqldump 实用程序在输出中不包括 my.cnf 中的 SQL_MODE

php - ZEND 框架 fatal error : Uncaught exception 'Zend_Application_Bootstrap_Exception'

c# - 去除unbox_any的抖动逻辑