首页 > 解决方案 > 连接包含逗号分隔值的表

问题描述

我有三个 Excel 表,我将它们推送到 SQL Server 中的表中,我需要加入这些表。但是,我相信 - 正如我已经尝试过的那样 - 正常加入是行不通的。我有编程背景,但对 SQL 了解不多。

Table1

ID  Data_column reference_number
1   some data   1528,ss-456
2   some data   9523
3   some data   ss-952
4   some data   null

Table2 

ID      Data_column
ss-456  some data
ss-952  some data


Table3 

ID      Data_column
1528    some data
9523    some data

在下面的情况下,我将如何在两张桌子上加入这个原始数据。

Table1

ID  Data_column reference_number
1   some data   1528,ss-456

标签: sqlsql-servertsql

解决方案


declare @t1 as table(
     id int
    ,data_column varchar(20)
    ,reference_number varchar(20)
)

declare @t2 as table(
     id varchar(20)
    ,data_column varchar(20)
)

declare @t3 as table(
     id varchar(20)
    ,data_column varchar(20)
)

insert into @t1 values(1,'some data','1528,ss-456'),(2,'some data','9523'),(3,'some data','ss-952'),(4,'some data',null);

insert into @t2 values('ss-456','some data'),('ss-952','some data');

insert into @t3 values(1528,'some data'),(9523,'some data');

快速解决方案

select * from @t1 t1
left outer join @t2 t2 on t1.reference_number like '%'+t2.id or t1.reference_number like t2.id+'%'
left outer join @t3 t3 on t1.reference_number like '%'+t3.id or t1.reference_number like t3.id+'%'

结果(左连接):

id  data_column reference_number    id      data_column id  data_column
1   some data   1528,ss-456         ss-456  some data   1528    some data
2   some data   9523                NULL    NULL        9523    some data
3   some data   ss-952              ss-952  some data   NULL    NULL
4   some data   NULL                NULL    NULL        NULL    NULL

您可以将“左外连接”更改为“内连接”以进行精确匹配。


推荐阅读