现在有一个mysql表, 其中有一个字段id,一个字段是 brandIds (其中存放的数据是多个不同的id 用逗号隔开的), 现在要你用查询语句查出来 每个id 对应的 每个拆分后的 brandId
时间: 2024-09-15 15:10:28 浏览: 46
在MySQL中,如果你想查询出每个`id`对应的所有`brandIds`中的每个独立的`brandId`,你可以使用`SUBSTRING_INDEX`函数结合`UNION`或者`UNION ALL`来实现。以下是一个查询语句的示例:
```sql
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(brandIds, ',', numbers.n), ',', -1) AS brandId
FROM (
SELECT id, brandIds, n
FROM (SELECT @n := 0) n,
(SELECT @c := 0) c,
your_table,
(SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL ...
UNION ALL SELECT MAX(LENGTH(brandIds) - LENGTH(REPLACE(brandIds, ',', '')) + 1)
FROM your_table) numbers(n)
WHERE CHAR_LENGTH(brandIds) - CHAR_LENGTH(REPLACE(brandIds, ',', '')) >= numbers.n - 1
) AS exploded
WHERE n <= CHAR_LENGTH(brandIds) - CHAR_LENGTH(REPLACE(brandIds, ',', '')) + 1
ORDER BY id, brandId;
```
在这个查询语句中,首先,内部的SELECT语句计算出表中每个`brandIds`字段的最大子字符串数量(即最多有多少个逗号分隔的id),然后通过内部的`UNION`创建一个包含1到这个最大值的临时数字表。接着,外部的SELECT语句结合`SUBSTRING_INDEX`函数,将每个`brandIds`字符串按照逗号分隔成单独的`brandId`。
请注意,你需要将`your_table`替换为你的实际表名,并且在`UNION ALL SELECT MAX(LENGTH(brandIds) - LENGTH(REPLACE(brandIds, ',', '')) + 1)`中计算的子字符串数量可能需要根据实际情况调整。
阅读全文