2017-02-19 5 views
0

私はPostgresを初めて使っています。SQL関連の何かをしてから何年も経っています。だから私はおそらくこれを思っていますが...Postgres:複数列のsubselectではどこにありますか?

私は一群の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; 

私はこれを行う方法はありますか?または私のアプローチは間違っていますか?

+2

シンプルなJOINがここではうまくいかない理由はよくわかりません。 – jcaron

+0

IN()かっこで選択すると、1つの列のみが返されます – McNets

答えて

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は一度だけサブクエリで表示されていることを前提としています。それ以外の場合は、重複を処理するために操作を増やす必要があります。

+0

いくつかのオーバーヘッドIMOがあります:http://pastebin.com/vKBWk5d0 – Abelisto

+0

これは私がもともと試みたのと似たものですが、メインクエリに 'WHERE ca_seed IN()'句を適用します。 私は 'cs_seeds'のリストを返すためにサブクエリを使って' colours_area'テーブルから一致するエントリを取得することにしました。関係のおかげで、結果の重複は私を煩わせることはありません。 –

関連する問題