GROUP CONCAT 在子查询中不起作用 - mysql

GROUP CONCAT not working in a subquery - mysql

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

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

哪个returns:

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 条记录的正确结果。

提前致谢

不需要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将return一个字符串以,作为分隔符,你需要的是多个值。

如果属性 table 每个 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))