如何在mysql中连接多行子查询结果?

时间:2015-06-01 10:39:19

标签: mysql sql

我想将子查询的所有匹配数据逗号与web.config.template函数连接起来。但是这个查询只通过连接返回一个数据,如果我传递静态ID,如IN(),则返回与ID对应的所有数据。

示例:

IN(1,2,3)

返回一条记录:

(SELECT GROUP_CONCAT(product_name SEPARATOR ", ") AS pname FROM tbl_product WHERE product_id IN (b.product_id)) as product

返回3条记录:

while (SELECT GROUP_CONCAT(product_name SEPARATOR ", ") AS pname FROM tbl_product WHERE product_id IN (1,2,3)) as product 列包含逗号分隔值。

这是我的疑问:

b.product_id

请让我知道我在哪里做错了。

1 个答案:

答案 0 :(得分:1)

这个表达式:

SELECT GROUP_CONCAT(product_name SEPARATOR ", ") AS pname
FROM tbl_product
WHERE product_id IN (b.product_id)) as product

不按预期行事。如果product_id是一个字符串,例如'1,2,3',则表示列表中的一个元素,而不是三个。

问题的正确解决方法是不将列表存储为逗号分隔列表。 SQL有一个很好的数据结构来存储列表;它被称为“表”,而不是“字符串”。另外,将数字存储为字符串是个坏主意。

当您正在找出正确的数据结构时,有一种解决方法。这是函数find_in_set()

WHERE find_in_set(product_id, b.product_id) as product