2

我有以下两个表,其中包含以下数据。我想在两个表连接时返回所有数据。例如,SELECT t1.data, t2.data FROM t1 INNER JOIN t2 ON t2.t1_id=t2.id WHERE t1.id=1; 现在是棘手的部分。我不想返回 3 行,而只返回 1 行,我希望 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
4

3 回答 3

2

您可以使用GROUP_CONCATwhich 使用分隔符连接组中的非空值(默认为逗号)

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

于 2013-09-05T12:43:37.310 回答
1

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

上面的示例将只返回一个单元格(一行一列)。

于 2013-09-05T12:40:17.510 回答
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
于 2013-09-05T12:47:40.497 回答