Mysql 如何从一个表中获取所有产品,并从包含多行的另一个表中合并一行?
我必须坐在桌子上<代码>产品表和Mysql 如何从一个表中获取所有产品,并从包含多行的另一个表中合并一行?,mysql,Mysql,我必须坐在桌子上产品表和产品_变体表。 在产品表中,我有 标识、产品名称、照片 在product\u variants表中,我有 id、产品id、包装大小、价格 我必须先添加产品,然后再添加变体。可能没有为此添加任何变体 我想从变体表中以最低价格获取所有具有一个变体详细信息的产品 示例场景: 产品表 id product_name photo 1 product_1 1.png 2 product_2 2.png 3 produc
产品_变体
表。
在产品表中
,我有
标识、产品名称、照片
在product\u variants
表中,我有
id、产品id、包装大小、价格
我必须先添加产品,然后再添加变体。可能没有为此添加任何变体
我想从变体表中以最低价格获取所有具有一个变体详细信息的产品
示例场景:
产品表
id product_name photo
1 product_1 1.png
2 product_2 2.png
3 product_3 3.png
4 product_4 4.png
产品类型
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.
谢谢。基于您可以找到的所有其他问题,或者在使用GROUP BY和MIN/MAX and JOINs时有一些问题。您可以使用以下方法:
SELECT
product_id,
MIN(price) as price
FROM
product_variants
GROUP BY
product_id
这将导致以下输出(ID可能不同):
对于步骤2,我们在自身的联接查询中使用此结果:
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 |
| 5 | product_4 | 4.png | NULL | NULL |
+----+--------------+-------+-------------+-------+
最大的问题是获取已发现变体的剩余信息。不能在一个查询中执行此操作,因为group函数将获取正确的值,但group BY后面的其他列值将不会来自找到的group函数值,而很可能来自组中的第一行。请在格式设置上稍加努力。你试过什么了吗?小费。将单位与价值分开存放。谢谢@草莓。但这只是一个例子。在我的项目中,我已将它们分开。请修改您的示例
+----+--------------+-------+-------------+-------+
| 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 |
+----+--------------+-------+-------------+-------+
+----+--------------+-------+-------------+-------+
| 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 |
+----+--------------+-------+-------------+-------+