簡體   English   中英

INNER JOIN表並以CSV格式返回所有聯接結果(不是單獨的記錄)

[英]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

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

上面的示例將僅返回一個單元格(一行加一列)。

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM