首頁 > 資料庫 > mysql教程 > 如何連接兩個表中的逗號分隔資料列?

如何連接兩個表中的逗號分隔資料列?

Linda Hamilton
發布: 2025-01-03 15:31:39
原創
1025 人瀏覽過

How to Join Comma-Delimited Data Columns from Two Tables?

連接逗號分隔的資料列

資料表通常在儲存格內包含逗號分隔的值。提取和標準化這些值對於進一步的數據分析至關重要。在本文中,我們將探索連接兩個表中逗號分隔資料並以統一格式呈現結果的技術。

考慮以下兩個表:

表 1 ( T1)

col1 col2
C1 john
C2 alex
C3 piers
C4 sara

表 2 (T2)

col1 col2
R1 C1,C2,C4
R2 C3,C4
R3 C1,C4

所需結果:

col1 col2
R1 john,alex,sara
R2 piers,sara
R3 john,sara

解決方案:

標準化:

理想的解決方案是標準化表2透過將逗號分隔的值拆分為單獨的關係。這將建立一個包含兩列的新表:col1 和 col2,其中每一行代表先前儲存在表 2 的 col2 列中的值。

使用子查詢連接(對於XML 路徑):

如果規範化不可行,我們可以使用子查詢和FOR XML PATH 子句來擷取逗號分隔的值作為單一值string.

SELECT col1, 
(
  SELECT ', '+t1.col2
  FROM t1
  WHERE ','+t2.col2+',' LIKE '%,'+CAST(t1.col1 AS VARCHAR(10))+',%'
  FOR XML PATH(''), TYPE
).value('substring(text()[1], 3)', 'VARCHAR(MAX)') AS col2
FROM t2;
登入後複製

與Split函數連接:

或者,我們可以創建一個名為Split 的用戶定義函數來從逗號分隔的字串中提取單個值.

CREATE FUNCTION [dbo].[Split](@String VARCHAR(MAX), @Delimiter CHAR(1))
RETURNS @temptable TABLE (items VARCHAR(MAX))
AS
BEGIN
    DECLARE @idx INT;
    DECLARE @slice VARCHAR(8000);

    SELECT @idx = 1;
    IF LEN(@String) < 1 OR @String IS NULL RETURN;

    WHILE @idx != 0
    BEGIN
        SET @idx = CHARINDEX(@Delimiter, @String);
        IF @idx != 0
            SET @slice = LEFT(@String, @idx - 1);
        ELSE
            SET @slice = @String;

        IF (LEN(@slice) > 0)
            INSERT INTO @temptable(Items) VALUES (@slice);

        SET @String = RIGHT(@String, LEN(@String) - @idx);
        IF LEN(@String) = 0 BREAK;
    END
RETURN;
END;
登入後複製

使用Split 函數,我們可以將各個值儲存在單獨的行中或連接起來將它們重新轉換為逗號分隔的字串。

以上是如何連接兩個表中的逗號分隔資料列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板