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