为什么将多行合并为一列会重复数据?
Why does combining multiple rows into one column duplicates data?
我知道这个问题以前有人回答过,但我找不到有类似问题的人。
我在下面创建了一个示例 table:
TableA - aID | aName
1 | House
TableB - bID | bmodel | bname | aID
1 | studio | classy | 1
2 | studio | small | 1
3 | apartment | classy | 1
TableC - cID | cmodel | cname | aID
1 | bedroom | big | 1
2 | bedroom | small | 1
3 | bedroom | big | 1
我正在努力实现
aID | aName | bmodel bname | cmodel cname
1 | house | studio classy, studio small, apartment classy | bed big, bed small, bed big
事情是这样的
aID | aName | bmodel bname | cmodel cname
1 | house | studio classy, studio small, apartment classy, studio classy, studio small, appartment classy | bedroom big, bedroom small, bedroom small, bedroom big, bedroom small, bedroom small
我添加的越多GROUP_CONCAT它就重复得更多。
我使用的代码:
SELECT
TableA.aId, TableA.aname,
GROUP_CONCAT(CONCAT(TableB.bmodel, ' ', TableB.bname) SEPARATOR ', ') as BModNam,
GROUP_CONCAT(CONCAT(TableC.cmodel, ' ', TableC.cname) SEPARATOR ', ') AS CModNam
FROM TableB
JOIN cases
ON TableB.aID = TableA.aId
JOIN TableC
ON TableC.aid = TableA.aID
WHERE
TableA.aID=1
我知道我可以使用不同的但会排除重复的行(即工作室、经典、卧室、大)
将对 GROUP_CONCAT
的调用作为 select 语句中的子查询:
SELECT
aID,
aName,
(SELECT GROUP_CONCAT(CONCAT(b.bmodel, ' ', b.bname))
FROM TableB b WHERE b.aID = t.aID GROUP BY b.aID) AS bmodel_bname,
(SELECT GROUP_CONCAT(CONCAT(c.cmodel, ' ', c.cname))
FROM TableC c WHERE c.aID = t.aID GROUP BY c.aID) AS cmodel_cname
FROM TableA t
WHERE aID = 1;
连接和当前输出的问题在于,您将来自两个 table 的模型和名称集相乘。使用子查询可以解决这个问题,因为每个子查询只为 table.
生成一个集中的 CSV 列表
输出:
aID aName bmodel_bname cmodel_cname
1 House studio classy,studio small, bedroom big,bedroom small,
apartment classy bathroom big
我知道这个问题以前有人回答过,但我找不到有类似问题的人。
我在下面创建了一个示例 table:
TableA - aID | aName
1 | House
TableB - bID | bmodel | bname | aID
1 | studio | classy | 1
2 | studio | small | 1
3 | apartment | classy | 1
TableC - cID | cmodel | cname | aID
1 | bedroom | big | 1
2 | bedroom | small | 1
3 | bedroom | big | 1
我正在努力实现
aID | aName | bmodel bname | cmodel cname
1 | house | studio classy, studio small, apartment classy | bed big, bed small, bed big
事情是这样的
aID | aName | bmodel bname | cmodel cname
1 | house | studio classy, studio small, apartment classy, studio classy, studio small, appartment classy | bedroom big, bedroom small, bedroom small, bedroom big, bedroom small, bedroom small
我添加的越多GROUP_CONCAT它就重复得更多。
我使用的代码:
SELECT
TableA.aId, TableA.aname,
GROUP_CONCAT(CONCAT(TableB.bmodel, ' ', TableB.bname) SEPARATOR ', ') as BModNam,
GROUP_CONCAT(CONCAT(TableC.cmodel, ' ', TableC.cname) SEPARATOR ', ') AS CModNam
FROM TableB
JOIN cases
ON TableB.aID = TableA.aId
JOIN TableC
ON TableC.aid = TableA.aID
WHERE
TableA.aID=1
我知道我可以使用不同的但会排除重复的行(即工作室、经典、卧室、大)
将对 GROUP_CONCAT
的调用作为 select 语句中的子查询:
SELECT
aID,
aName,
(SELECT GROUP_CONCAT(CONCAT(b.bmodel, ' ', b.bname))
FROM TableB b WHERE b.aID = t.aID GROUP BY b.aID) AS bmodel_bname,
(SELECT GROUP_CONCAT(CONCAT(c.cmodel, ' ', c.cname))
FROM TableC c WHERE c.aID = t.aID GROUP BY c.aID) AS cmodel_cname
FROM TableA t
WHERE aID = 1;
连接和当前输出的问题在于,您将来自两个 table 的模型和名称集相乘。使用子查询可以解决这个问题,因为每个子查询只为 table.
生成一个集中的 CSV 列表输出:
aID aName bmodel_bname cmodel_cname
1 House studio classy,studio small, bedroom big,bedroom small,
apartment classy bathroom big