是否可以执行此SQL查询/联接?

时间:2018-10-31 22:10:54

标签: mysql sql database

我正在学习SQL,目前正在查看SQL连接。 在MySQL中使用不同的联接进行测试,我想知道是否有可能将所有这些合并为一列。

DB有3个表:

  • 商店
  • 价格
  • 产品

产品外观如下:

  • product_id
  • 产品名称

商店看起来像:

  • shop_id
  • shop_name

价格如下:

  • price_id
  • price_amount
  • product_id
  • shop_id

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

到目前为止,我的输出就像 product_id,price_amount,shop_id,shop_name,但在3个不同的行上。

可以做到吗?如果可能,我正在寻找什么样的加入方式?

我没有看到我可以在哪里使用它,只是尝试学习。

谢谢。

关于, 迈克

1 个答案:

答案 0 :(得分:0)

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

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

例如:

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进行排序以方便地进行处理。