[英]INNER JOIN table and return all joined results as CSV (not separate records)
我有以下兩個表,其中包含以下數據。 當兩個表連接在一起時,我想返回所有數據。 例如, SELECT t1.data, t2.data FROM t1 INNER JOIN t2 ON t2.t1_id=t2.id WHERE t1.id=1;
情況下, 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
您可以使用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
您可以使用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
上面的示例將僅返回一個單元格(一行加一列)。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.