【问题标题】:GROUP CONCAT not working in a subquery - mysqlGROUP CONCAT 在子查询中不起作用 - mysql
【发布时间】:2016-02-12 19:15:41
【问题描述】:

我编写了一个 mysql 查询,以便根据与特定组相关的 ID 获取数据库中的一组属性。我在我的网站上使用 OpenCart 2,我的子查询如下:

SELECT GROUP_CONCAT(attribute_id) AS attr_ids 
FROM oc79_attribute 
WHERE attribute_group_id = 13

返回:

44,45,46,47

当我在需要获取属性名称的查询中编写此代码时,我只得到一个结果:

SELECT * 
FROM oc79_attribute_description 
WHERE attribute_id IN(SELECT GROUP_CONCAT(attribute_id) AS attr_ids 
                      FROM oc79_attribute WHERE attribute_group_id = 13)

我只从attribute_id 44得到结果,而不是其他的,即使我知道记录存在。

这是处理这个问题的正确方法,还是我只是错过了什么?

编辑:

澄清一下,如果我写的话:

SELECT * FROM oc79_attribute_description WHERE attribute_id IN(44,45,46,47)

我得到了 4 条记录的正确结果。

提前致谢

【问题讨论】:

标签: mysql sql opencart group-concat


【解决方案1】:

不需要GROUP_CONCAT:

SELECT * 
FROM oc79_attribute_description 
WHERE attribute_id IN(SELECT attribute_id AS attr_ids 
                      FROM oc79_attribute
                      WHERE attribute_group_id = 13);

查看两者之间的区别:

WHERE attribute_id IN ('44,45,46,47')     -- one string

WHERE attribute_id IN ('44','45','46','47')  -- multiple values

GROUP_CONCAT 将返回一个以, 为分隔符的字符串,您需要的是多个值。

【讨论】:

    【解决方案2】:

    如果属性表每个attribute_id只有一行,那么您可以使用简单的连接:-

    SELECT oc79_attribute_description.* 
    FROM oc79_attribute_description 
    INNER JOIN oc79_attribute 
    ON oc79_attribute_description.attribute_id = oc79_attribute.attribute_id 
    AND oc79_attribute.attribute_group_id = 13
    

    如果它有多个,那么你可以使用 DISTINCT:-

    SELECT DISTINCT oc79_attribute_description.* 
    FROM oc79_attribute_description 
    INNER JOIN oc79_attribute 
    ON oc79_attribute_description.attribute_id = oc79_attribute.attribute_id 
    AND oc79_attribute.attribute_group_id = 13
    

    如果你真的想搜索一串逗号分隔值(我真的不建议这样做),那么你可以使用 FIND_IN_SET:-

    SELECT * 
    FROM oc79_attribute_description 
    WHERE FIND_IN_SET(attribute_id, (SELECT GROUP_CONCAT(attribute_id) AS attr_ids 
                          FROM oc79_attribute WHERE attribute_group_id = 13))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 2015-07-24
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多