1

Products と Items の 2 つのテーブルがあります。でソートされdistinctた列に基づいて、製品に属するアイテムを選択したいと考えています。conditionprice ASC

+-------------------+
| id | name         |
+-------------------+
| 1 | Mickey Mouse  |
+-------------------+

+-------------------------------------+
| id | product_id | condition | price |
+-------------------------------------+
| 1  | 1           | New       | 90   |
| 2  | 1           | New       | 80   |
| 3  | 1           | Excellent | 60   |
| 4  | 1           | Excellent | 50   |
| 5  | 1           | Used      | 30   |
| 6  | 1           | Used      | 20   |
+-------------------------------------+

望ましい出力:

+----------------------------------------+
| id | name          | condition | price |
+----------------------------------------+
| 2  | Mickey Mouse  | New       | 80    |
| 4  | Mickey Mouse  | Excellent | 50    |
| 6  | Mickey Mouse  | Used      | 20    |
+----------------------------------------+

これがクエリです。必要な 3 つのレコードではなく、6 つのレコードを返します。

SELECT DISTINCT(items.condition), items.price, products.name
FROM products
INNER JOIN items ON products.id = items.product_id
WHERE products.id = 1
ORDER BY items."price" ASC, products.name;
4

4 に答える 4

3

正しい PostgreSQL クエリ:

SELECT DISTINCT ON (items.condition) items.id, items.condition, items.price, products.name
FROM products
INNER JOIN items ON products.id = items.product_id
WHERE products.id = 1
ORDER BY items.condition, items.price, products.name;

SELECT DISTINCT ON ( expression [, ...] ) は、指定された式が等しいと評価される行の各セットの最初の行のみを保持します。

詳細here

于 2013-07-08T14:57:24.277 に答える