Postgres:WHERE IN subselect有多列?

时间:2017-02-19 22:51:54

标签: postgresql

我是Postgres的新手 - 自从我做了任何与SQL相关的事情已经好几年了,所以我可能过度思考了这一点 - 但是...

我有一个子查询,它选择一堆ID(cs_seed)来执行另一个查询。

我希望能够做的是维护子查询的顺序。我搜索了几个小时,发现row_number()功能似乎很有希望,但我显然无法在WHERE IN查询中使用它,因为它返回了多个列。

SELECT ca_seed, ca_biome, ca_percent 
FROM colours_area 
WHERE ca_seed IN (SELECT cs_seed, row_number() OVER (ORDER BY cs_percent DESC) AS rn 
                  FROM colours_spawn 
                  WHERE cs_biome = 140 
                  ORDER BY cs_percent DESC LIMIT 10) 
ORDER BY rn DESC;

我有什么方法可以做到这一点?或者我的方法是错的?

1 个答案:

答案 0 :(得分:1)

使用join

SELECT ca.ca_seed, ca.ca_biome, ca.ca_percent 
FROM colours_area ca JOIN
     (SELECT cs_seed, row_number() OVER (ORDER BY cs_percent DESC) AS rn 
      FROM colours_spawn 
      WHERE cs_biome = 140 
      ORDER BY cs_percent DESC
      LIMIT 10
     ) cs
     ON ca.ca_seed = cs.cs_seed
ORDER BY rn DESC;

这假定cs_seed仅在子查询中出现一次。否则,您可能需要进行更多操作来处理重复项。