INNER JOIN表并以CSV格式返回所有已连接的结果(不是单独的记录)

时间:2013-09-05 12:33:50

标签: mysql sql

我有以下两个表,其中包含以下数据。我想在两个表连接时返回所有数据。例如,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

3 个答案:

答案 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)

您可以使用CONCATCONCAT_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