假设我有3个这样的SQL表:
水果桌:
|----------|------------|
| fruit_id | fruit_name |
|----------|------------|
| 1 | Banana |
| 2 | Apple |
| 3 | Pear |
|----------|------------|
表颜色:
|----------|------------|
| color_id | color_name |
|----------|------------|
| 91 | Yellow |
| 92 | Green |
| 93 | Red |
|----------|------------|
关联表:
|----------|----------|
| fruit_id | color_id |
|----------|----------|
| 1 | 91 |
| 1 | 92 |
| 2 | 91 |
| 2 | 92 |
| 2 | 93 |
| 3 | 93 |
|----------|----------|
如何列出水果和同事颜色,如下所示:
|----------|----------|
| fruit_id | color_id |
|----------|----------|
| 1 | 91,92 |
| 2 | 91,92,93 |
| 3 | 93 |
|----------|----------|
我尝试了什么:
SELECT
fruit_id,
GROUP_CONCAT(COALESCE(color_id, "0")) AS color_id
FROM fruits
JOIN associatives
LEFT JOIN colors
ON FIND_IN_SET(fruit_id, color_id)
GROUP BY fruit_id
如果你的水果没有颜色,你只需要一个LEFT JOIN
。但是您的示例数据没有显示出来。无论如何,我调整了来自@Hackerman的样本以包含另一个水果来展示如何处理这种情况
select f.fruit_id, GROUP_CONCAT( COALESCE (a.color_id, 0) ) as color_id
from fruits f
left join associatives a
ON f.fruit_id = a.fruit_id
group by f.fruit_id
您只需要查询associates
表以获得所需的结果:
select fruit_id, GROUP_CONCAT(color_id) as color_id
from associatives
group by fruit_id
但是:ぁzxswい