[英]How to fetch all the products from one table and merge one row from another table which contain multiple rows?
我要桌子。 products
表和product_variants
表。 在product table
,我有
id, product_name, photo
。
在product_variants
表中,我有
id, product_id, packet_size, price
。
我必須先添加產品,然后再添加變體。 可能沒有為此添加任何變體。
我想以最低的價格從變量表中獲取所有帶有一個變量詳細信息的產品。
示例方案:
產品表
id product_name photo
1 product_1 1.png
2 product_2 2.png
3 product_3 3.png
4 product_4 4.png
product_variants
id product_id packet_size price
1 1 100 ML 50 RS.
2 1 200 ML 100 Rs.
3 1 300 ML 150 RS.
4 2 300 L 300 Rs.
5 2 200 L 200 Rs.
6 3 200 K 200 Rs.
我希望結果如下:
1 product_1 1.png 100 ML 50 RS.
2 product_2 2.png 200 L 200 Rs.
3 product_3 3.png 200 K 200 Rs.
謝謝。
基於“ mysql join group min”或“ mysql join group max”可以找到的所有其他問題,使用GROUP BY和MIN / MAX和JOIN時有一些問題。 您可以使用以下方法:
對於步驟1,查詢將如下所示:
SELECT
product_id,
MIN(price) as price
FROM
product_variants
GROUP BY
product_id
這將導致以下輸出(標識可能不同):
+------------+-------+
| product_id | price |
+------------+-------+
| 1 | 50 |
| 2 | 200 |
| 4 | 200 |
+------------+-------+
對於步驟2,我們在自身的JOIN查詢中使用此結果:
SELECT
v2.product_id,
v2.packet_size,
v2.price
FROM
product_variants v2
JOIN
(SELECT -- here is your first query
product_id,
MIN(price) as price
FROM
product_variants
GROUP BY
product_id
) v1 -- notice the "v1" alias here, its needed
USING (product_id, price)
結果將是:
+------------+-------------+-------+
| product_id | packet_size | price |
+------------+-------------+-------+
| 1 | 100 ML | 50 |
| 2 | 200 L | 200 |
| 4 | 200 L | 200 |
+------------+-------------+-------+
對於步驟3,這只是兩個表之間的“普通”聯接:
SELECT
p.id,
p.product_name,
p.photo,
v3.packet_size,
v3.price
FROM
products p
JOIN
(SELECT -- here is query 2
v2.product_id,
v2.packet_size,
v2.price
FROM
product_variants v2
JOIN
(SELECT -- here is query 1
product_id,
MIN(price) as price
FROM
product_variants
GROUP BY product_id
) v1
USING (product_id, price)
) v3
ON
p.id = v3.product_id;
這將為您帶來以下結果(ID可能再次不同):
+----+--------------+-------+-------------+-------+
| id | product_name | photo | packet_size | price |
+----+--------------+-------+-------------+-------+
| 1 | product_1 | 1.png | 100 ML | 50 |
| 2 | product_2 | 2.png | 200 L | 200 |
| 4 | product_3 | 3.png | 200 L | 200 |
+----+--------------+-------+-------------+-------+
而且,如果您使用LEFT JOIN而不是“普通” JOIN,則還將獲得沒有任何變體的產品:
+----+--------------+-------+-------------+-------+
| id | product_name | photo | packet_size | price |
+----+--------------+-------+-------------+-------+
| 1 | product_1 | 1.png | 100 ML | 50 |
| 2 | product_2 | 2.png | 200 L | 200 |
| 4 | product_3 | 3.png | 200 L | 200 |
| 5 | product_4 | 4.png | NULL | NULL |
+----+--------------+-------+-------------+-------+
最大的困難是獲取找到的變體的剩余信息。 您無法在一個查詢中執行此操作,因為組函數將獲取正確的值,但是GROUP BY之后的其他列值將不是來自找到的組函數值,而是很有可能來自組的第一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.