使用MySQL在不同字段上的多个组连接

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我有这样的疑问:

SELECT product.id,
       GROUP_CONCAT(image.id) AS images_id,
       GROUP_CONCAT(image.title) AS images_title,
       GROUP_CONCAT(facet.id) AS facets_id
...
GROUP BY product.id

并且查询工作正常,但不像预期的那样,因为如果我有一个有5个方面和1个图像的产品(假设一个图像id=7),那么我在“映像”中会得到类似的结果。_“身份证”:

“7,7,7,7,7”

如果我有两个图像(7和3),那么我会得到如下内容:

“7,7,7,7,3,3,3,3,3”

在各个方面,我得到了这样的东西:

“8,7,6,5,4,8,7,6,5

我认为MySQL正在对查询返回的不同行进行某种类型的合并,然后将所有内容连接起来。

我的预期结果是(对于最后一个例子):

图像_ID=“7,3”

面_ID=“8,7,6,5,4”

我可以在组中使用DISTIST_但是我还有另外一个问题:如果我有两个标题相同的图像,其中一个是完整的,然后我得到如下内容:

图像_ID=“7,3,5”

图像_标题=“Title7and3,Title 5”

所以我想念图像之间的关系_ID和图像_标题。

有人知道在MySQL中是否可以进行这个查询吗?

也许我把一切都复杂化了却没有任何真正的好处。由于性能原因,我只想执行一个查询,但现在我不太确定执行两个查询是否更快(一个用于选择方面,另一个用于图像)。

请解释你认为什么是最好的解决办法,以及为什么。

谢谢!

提问于
用户回答回答于

需要将每个组分别:

SELECT
    p.id,
    images_id,
    images_title,
    facets_id,
    ...
FROM PRODUCT p
JOIN (SELECT product.id, GROUP_CONCAT(image.id) AS images_id
      FROM PRODUCT GROUP BY product.id) a on a.id = p.id
JOIN (SELECT product.id, GROUP_CONCAT(image.title) AS images_title
      FROM PRODUCT GROUP BY product.id) b on b.id = p.id
JOIN (SELECT product.id, GROUP_CONCAT(facet.id) AS facets_id
      FROM PRODUCT GROUP BY product.id) b on c.id = p.id
...
用户回答回答于

只要加上DISTINCT...

例子:

GROUP_CONCAT(DISTINCT image.id) AS images_id

扫码关注云+社区