Postgresql Postgres:具有多列的子选择中的何处?

Postgresql Postgres:具有多列的子选择中的何处?,postgresql,Postgresql,我是博士后的新手,已经好几年没有做过任何与SQL相关的事情了,所以我可能想得太多了,但是 我有一个子查询,它选择一堆IDs cs_seed来执行另一个查询 我想做的是维护子查询的顺序。我搜索了几个小时,发现了行数功能,这似乎很有希望,但我显然不能在WHERE-in查询中使用它,因为它返回多个列 SELECT ca_seed, ca_biome, ca_percent FROM colours_area WHERE ca_seed IN (SELECT cs_seed, row_number(

我是博士后的新手,已经好几年没有做过任何与SQL相关的事情了,所以我可能想得太多了,但是

我有一个子查询,它选择一堆IDs cs_seed来执行另一个查询

我想做的是维护子查询的顺序。我搜索了几个小时,发现了行数功能,这似乎很有希望,但我显然不能在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;
我有什么办法可以做到这一点吗?还是我的方法错了?

使用join


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

不太清楚为什么简单联接在这里不起作用?在“在括号之间选择”中,必须只返回一列,这与我最初尝试的类似,但是,当将WHERE ca_seed IN子句应用于主查询时,它不会生成我知道是正确的结果。这就是为什么我使用子查询返回cs_种子列表,然后从colors_area表中获取匹配项。由于关系,重复的结果不会困扰我。
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;