压缩多个嵌套的select语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了压缩多个嵌套的select语句相关的知识,希望对你有一定的参考价值。

我想为每个userId获取最新的投票(基于dateCreated)。下面我的尝试有效,但我觉得多个嵌套的SELECT语句非常低效。谁有更好的解决方案?我是SQL的新手,所以我很感激您的解决方案以及代码。

SELECT * FROM 
(
    SELECT DISTINCT t.userId 
    FROM 
    (
        SELECT userId,vote,dateCreated 
        FROM pgVote 
        WHERE categoryId = 528 
        ORDER BY dateCreated DESC
    ) 
    AS t
) 
AS u
答案
SELECT aa.*
FROM pgVote aa
INNER JOIN (
    SELECT userId, MAX(dateCreated) as latestDate
    FROM pgVote
    WHERE categoryId = 528
    GROUP BY userId
) bb ON aa.userId = bb.userId AND aa.dateCreated = bb.latestDate

表bb只是具有最新日期的用户标识列表。一旦你内部加入aa是完整的表,那么它将为你过滤最新的投票。

以上是关于压缩多个嵌套的select语句的主要内容,如果未能解决你的问题,请参考以下文章

sql嵌套删除语句

sql语句字符串的嵌套问题

sql语句中where条件的嵌套子查询性能

SQL Select 语句的用法

mysql中insert与select的嵌套使用解决组合字段插入问题

sql语句中嵌套时候用in 和=有啥区别