我有以下两个表,其中包含以下数据。我想在两个表连接时返回所有数据。例如,SELECT t1.data, t2.data FROM t1 INNER JOIN t2 ON t2.t1_id=t2.id WHERE t1.id=1;
现在是棘手的部分。我不想返回3行但只有一行,我希望t2.data为CSV。例如,上面的查询将返回"bla1","hi1,hi2,hi2"
(如果没有连接结果,则为null或“”,而不是“,”)。这只是SQL的相当简单,还是我最好使用PHP等?如果是这样只用SQL,怎么样?感谢
t1
-id
-data
t2
-id
-t1_id
-data
t1
-id=1, data="bla1"
-id=2, data="bla2"
-id=3, data="bla3"
t2
-id=1, t1_id=1, data=hi1
-id=2, t1_id=1, data=hi2
-id=3, t1_id=1, data=hi3
-id=4, t1_id=2, data=hi4
答案 0 :(得分:2)
您可以使用GROUP_CONCAT
使用分隔符(默认为逗号)连接组中的非空值
SELECT t1.data, GROUP_CONCAT(t2.data)
FROM t1 JOIN t2
ON t1.id = t2.t1_id
WHERE t1.id = 1;
关于SQLFiddle的示例:http://sqlfiddle.com/#!2/68154/5
答案 1 :(得分:1)
您可以使用CONCAT
或CONCAT_WS
将“列”值粘贴在一起,并GROUP_CONCAT
将“值”粘贴在一起。
示例:
SELECT
x, y, z
FROM
table;
变成:
SELECT
GROUP_CONCAT(CONCAT('"', x, '","', y, '","', z, '"') SEPARATOR '\n')
FROM
table
GROUP BY x; -- considering x would be the unique row identifier
上面的示例将返回一个单元格(一行一列)。
答案 2 :(得分:0)
SELECT concat(t1.data,',',group_concat(t2.data)) FROM t1 INNER JOIN t2 ON
t2.t1_id=t1.id WHERE t1.id=1
group by t1.data