サブクエリでorder by
を実行したいのですが、代わりにメインクエリでdistinct on
を実行します。実際には同じレベルのdistinct on
とorder by
という文が1つしかない場合は、私が望むように降順でなければなりません。私は理由を理解したいのですが、distinct on
はその下のクエリが好きなので、注文を削除します。"DISTINCT"はサブクエリで "ORDER BY"が削除され、 "ORDER BY"もスローです
クエリ:
select distinct on (id) * from (
select * from products
left outer join product_descriptions on product_descriptions.product_id = products.id
order by id desc) as A
結果:
id product_name price
1 Navy Floral Embroidery Bomber Jacket 1390
2 Black Floral Embroidery Bomber Jacket 1390
3 Blue Wandy Blouse 750
4 White Adele Pants 1790
5 White Wandy Blouse 750
6 Black Wandy Blouse 750
7 Navy Adele Pants 1790
私はorder by
の差異レベルにdistinct on
を移動しようとしていますので、それは私がしようとしたとして、高速ですが、順序がなりますので、私は疑問を持っています削除されました。私はこのクエリから非常に遅いクエリの問題を解決しています。
with recursive categ_all as
(
select *, id as root_category,array_append(null,id) as category_path
from categories
where parent_id is null
union all
select c.*, p.root_category,array_append(p.category_path,c.id)
from categories c
join categ_all p on c.parent_id[1] = p.id
)
select * from products as p
left outer join categ_all on categ_all.id = ANY (p.category_ids)
order by p.created_at limit 20
私は私がorder by
を削除または配列でleft outer join
を削除する場合がわかります。それは高速ですが、私はまだ配列を使用する必要があります。 ありがとうございました。あなたが望むものを達成するためにサブクエリの中に発注に依存してはならない、一般的には
select distinct on (p.id) *
from products p join
product_descriptions pd
on p.id = pd.product_id
order by p.id;
:
内側の代わりに外側のクエリで注文してください。 –
サンプルテーブルのデータと予想される結果をフォーマット済みのテキスト(画像や画像へのリンクではありません)として追加してください。 – jarlh
現在のクエリの試行も表示してください。 – jarlh