MySQL 将值拆分为多行两个表

时间:2021-05-04 07:31:01

标签: php mysql laravel

我有桌子: 表a:

id | content    
1  | a, b, c    
2  | b
3  | b, c, d

表 b:

id | name  | value  
1  | a     | 3000
2  | b     | 4505
3  | c     | 1257
4  | k     | 2323

我想要这样的输出:

id | value             | content 
1  | 3000, 4505, 1257  | a, b, c
2  | 4505              | b
3  | 1257              | c

1 个答案:

答案 0 :(得分:1)

您可以尝试在 FIND_IN_SET 的帮助下连接两个表。然后由 b id 聚合以生成 CSV 值:

SELECT
    a.id,
    GROUP_CONCAT(b.value ORDER BY b.id) value,
    GROUP_CONCAT(b.name ORDER BY b.id) content
FROM TableA a
INNER JOIN TableB b
    ON FIND_IN_SET(b.name, a.content) > 0
GROUP BY
    a.id;

注意:您通常应该避免在 SQL 表中存储 CSV 数据。需要使用 FIND_IN_SET 通常是一种数据异味。

相关问题