SQL Synapse 比较 Column(multiple values) 和 Column(multiple values) 之间的数据

SQL Synapse Compare data between Column(multiple values) and Column(multiple values)

我需要比较 2 table 中的 2 列。

table一个:

ID|TEL
----------------
A1|1111,2222,3333

TABLE乙:

ID|TEL
----------------
A1|2222,4444

结果应在 TABLE A

中更新
A1|1111,2222,3333,4444

据我所知,也许我应该使用 string_split (B.Tel,'|') 中的 select 值来拆分它。但是,我不知道如何循环比较A和B。

请帮忙

这是我试过的方法,但没有用。

    with split_tel as
       (select id, 
       Value tel
from B
CROSS APPLY STRING_SPLIT(tel, ','))
,pre as (select sp.id
        ,sp.tel as split
        ,A.tel as target
from split_tel sp 
inner join A
on sp.id = A.id)

select id,split,target
from pre
where split like '%' + target + '%' ;

首先,您真的不应该像这样存储数据,尤其是当您必须对其进行基于集合的操作时。但是,如果您始终有效地添加数字而不是删除数字,则有一个使用 STRING_SPLITSTRING_AGG 的简单解决方案:

IF OBJECT_ID('tempdb..#tmpA') IS NOT NULL DROP TABLE #tmpA
IF OBJECT_ID('tempdb..#tmpB') IS NOT NULL DROP TABLE #tmpB

CREATE TABLE #tmpA ( 
    id      VARCHAR(5) NOT NULL,
    tel     VARCHAR(100) NOT NULL

);

CREATE TABLE #tmpB ( 
    id      VARCHAR(5) NOT NULL,
    tel     VARCHAR(100) NOT NULL

);

--INSERT INTO #tmpA VALUES ( 'A1', '1111,2222,3333' );
--INSERT INTO #tmpB VALUES ( 'A1', '2222,4444' );

INSERT INTO #tmpA 
SELECT 'A1', '1111,2222,3333'
UNION ALL
SELECT 'B1', '2222'

INSERT INTO #tmpB 
SELECT 'A1', '2222,4444'
UNION ALL
SELECT 'B1', '3333'


SELECT id, STRING_AGG( value, ',' ) tel
FROM
    (
    SELECT a.id, x.value
    FROM #tmpA a
        CROSS APPLY STRING_SPLIT( a.tel, ',' ) x
    UNION
    SELECT b.id, x.value
    FROM #tmpB b
        CROSS APPLY STRING_SPLIT( b.tel, ',' ) x
    ) y
GROUP BY id;