首页 > 解决方案 > 这个 SQL 查询/连接可能吗?

问题描述

我正在学习 SQL,目前正在研究 SQL 连接。在 MySQL 中使用不同的连接,我想知道这是否可能,将它全部放在 1 列中。

DB有3个表:

产品看起来像:

店铺长这样:

价格如下:

所以最大的问题是:是否可以将它组合起来使其输出如下:product_id,product_name,price_shop1,price_shop2,price_shop3

到目前为止,我的输出类似于 product_id、price_amount、shop_id、shop_name,但在 3 个不同的行上。

可以做到吗?如果可能的话,我在寻找什么样的加盟?

我不知道我可以在哪里使用它,只是想学习。

谢谢。

问候,迈克

标签: mysqlsqldatabase

解决方案


不完全是,我们正在讨论使用动态列数发出请求,因为您事先不知道有多少商店使用该产品。这是不支持的。

但是您可以有一个列,其中所有价格连接并以逗号分隔(或您选择的任何其他符号)。

例如:

SELECT
    a.product_id,
    a.product_name,
    GROUP_CONCAT(b.price_amount SEPARATOR ';') prices
FROM
    products a INNER JOIN prices b ON a.product_id = b.product_id
GROUP BY a.product_id

这应该会为您提供产品列表和所有可用价格的列表,但您必须以字符串的形式进行解析。

如果您还希望包括这些产品所在的商店,我建议您不要这样做。由于无论哪种方式都需要进行一些解析,因此只需获取完整列表,其中将包括产品重复项,但您可以通过排序product_id轻松处理。


推荐阅读