mysql中如何将一个表中的部分记录合并,mysql - 如何从一个表中获取所有产品并从另一个包含多行的表中合并一行? - SO中文参考 - www.soinside.com...

根据您在"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

这将导致以下输出(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之后的其他列值将不是来自找到的组函数值,而是很可能来自组中的第一行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值