GROUP_CONCAT SQL问题

时间:2017-10-03 17:32:57

标签: mysql sql

SELECT (SELECT GROUP_CONCAT(companyName) 
        FROM company WHERE id IN (27,38)) AS companyName, t.* 
FROM Test t  

我需要输出LIKE这个 它返回两个公司名称(例如:Apple,索尼)

但它执行似乎

SELECT (SELECT GROUP_CONCAT(companyName) 
        FROM company WHERE id IN ("27,38")) AS companyName, t.* 
FROM Test t  

所以它返回第一家公司NAME(例如:Apple)第27家公司NAME。

任何人都有帮助解决它。

下面的示例表结构

测试表

---------
Company
---------
27,38  > TEXT FIELD

公司表

--------------------
ID      companyName
-------------------
1         Apple
2         Sony
.         .
.         . 

3 个答案:

答案 0 :(得分:1)

您将27和28作为单个字符串传递,因此MySQL考虑第一个数字为27,这就是它返回苹果的原因。如果要返回Apple和Sony,则必须拆分字符串。

答案 1 :(得分:0)

您需要使用

SELECT group_concat(companyName separator ',')
FROM company WHERE id IN ("27,38");

答案 2 :(得分:0)

我看到您的评论看起来您将公司ID作为逗号分隔字符串存储在预告片中,而不是normalization,而是您可以添加新的联结表,其中包含公司和预告片的参考

trailer
=======
id name
1  some name 


company
id      name
-------------------
1         Apple
2         Sony

trailer_companies (junction table)
trailer_id company_id
---------------------
1          27
1          38 

现在,您可以使用联接

查询记录
select t.*,group_concat(c.name) companyName
from trailer t
join trailer_companies tc on (t.id = tc.trailer_id)
join company c on (tc.company_id = c.id)
group by t.id 

DEMO

如果您想继续使用当前的设计,这是不可取的,因为它很难优化,不适合缩放的应用程序

<击>

<击>
SELECT 
    (SELECT 
    GROUP_CONCAT(companyName SEPARATOR ',') 
    FROM company 
    WHERE  FIND_IN_SET(id,t.companyIds) > 0
    ) AS companyName, t.* 
FROM Trailers t   

<击>