1

MySQL クエリで JOIN に苦労しています。どういうわけか、私の結果が私が望むものではない理由を見つけることができません。

テーブル orders とテーブル products の 2 つのテーブルがあります。テーブル product は、注文の order.id を保持します。したがって、1 つの注文に複数の製品を含めることができるため、たとえば、products テーブルには 1 つの注文に対して 2 つのレコードが保持されます。

必要な結果は、製品の VAT が 21 であるすべての注文です。

テーブルの例。

orders
id | customer
---------------
1  | John Doe
2  | Hello World

order_products
id | order_id | product          | vat
1  | 1        | Porsche 911 GT4  | 21
2  | 1        | Audi R8 LMS      | 21
3  | 1        | Ferrari Enzo     | 19
3  | 2        | Bugatti Veyron   | 19

いいえ、製品の VAT が 21 であるすべての注文が必要です。したがって、テーブル order_products で LEFT JOIN を実行します。

SELECT orders.id, orders.customer, order_products.product FROM orders LEFT JOIN order_products ON orders.id = order_products.order_id WHERE order_products.vat = '21'

これは以下を返します。

1 John Doe Porsche
1 John Doe Audi R8 LMS

しかし、注文のすべての製品ではなく、orders.id が重要であるため、必要な結果は 1 つだけです。私は order_products に参加して、VAT 21 のみで注文を取得します。現時点では、これを修正する方法についてのオプションが不足しています。このサイトや他のサイトで結合に関するいくつかのトピックを読んだ後でも.

4

3 に答える 3

2

注文のみを気にする場合は、注文 ID でグループ化できます。

SELECT orders.id, orders.customer, order_products.product 
FROM orders 
LEFT JOIN order_products ON orders.id = order_products.order_id 
WHERE order_products.vat = '21'
GROUP BY orders.id;

ただしorder_products.product、1点のみの商品となりますのでご了承ください。すべての製品を表示したいが、1 つの列に表示したい場合は、次のように使用できますGROUP_CONCAT

SELECT orders.id, orders.customer, GROUP_CONCAT(order_products.product) 
FROM orders 
LEFT JOIN order_products ON orders.id = order_products.order_id 
WHERE order_products.vat = '21'
GROUP BY orders.id;

これは以下を返します:

1 John Doe Porsche, Audi R8 LMS
于 2013-10-04T10:35:56.477 に答える