sql - 如何在字符串中查找项目的并集

标签 sql hadoop hive

我有两个表,第一个表
表格1

Customer_id   Item_Id
   23           1
   23           2 
   23           1
   24           5
   24           3
   25           4

表2
 Item_Id      Connected_Items
    1             2,3,4
    2             1,3,6
    3             5
    4             8,7
    5             2,3

我想要的输出是与客户购买的商品关联的所有商品的并集,从关联商品中删除客户购买的所有重复商品和商品
Customer_id    Connected_Items
     23            3,4,6
     24            2
     25            8,7

我要做的是先将Customer_id和Item_Id重复数据删除,然后将其加入表2。
 SELECT
        a.customer_id,
        b.connected_items
    FROM (
        SELECT 
           customer_id,
           item_id
        FROM
           Table 1
        GROUP BY 
           customer_id,
           item_id) a
     JOIN
         Table 2 b
     ON
         a.Item_id = b.Item_id

我得到的输出是
    23       1,2,3,3,4,6
    24        2,3,5
    25         8,7

如何从客户已购买的商品中删除与connected_items列表重复的商品?

最佳答案

您可以在sql server中执行以下操作。

with customdata AS (

SELECT
t1.Customer_id ,t2.Item_Id ,t2.Connected_items 
FROM table1 AS t1 inner join table2 as t2 on t1.Item_Id  = t2.Item_Id 
)
,
 rowData AS  (

    SELECT F1.Customer_id,
 F1.Item_Id,
 O.splitdata 
FROM
 (
 SELECT *,
 cast('<X>'+replace(F.Connected_items,',','</X><X>')+'</X>' as XML) as xmlfilter from customdata F
 )F1
 CROSS APPLY
 ( 
 SELECT fdata.D.value('.','varchar(50)') as splitdata 
 FROM f1.xmlfilter.nodes('X') as fdata(D)) O
),
UniqueSet AS 
(

        SELECT
            rd.Customer_id,rd.Item_Id
        FROM  rowData AS rd
        GROUP BY rd.Customer_id,rd.Item_Id
),
FinalSet AS 
(

    SELECT
            DISTINCT aa.Customer_id,aa.splitdata 
        FROM  rowData AS aa
        WHERE NOT EXISTS (SELECT  * FROM UniqueSet as us WHERE us.Customer_id = aa.Customer_id  AND us.Item_Id = aa.splitdata )
)



SELECT DISTINCT   p.Customer_id,
  STUFF((SELECT distinct ',' + p1.splitdata
         FROM FinalSet p1
         WHERE p.Customer_id = p1.Customer_id
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)')
        ,1,1,'') Color
FROM FinalSet p;

关于sql - 如何在字符串中查找项目的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44295221/

相关文章:

c# - 是否可以从存储过程访问 Azure Blob?

sql - Coldfusion - 循环访问数据库查询结果时的可变字段名称

java - 编译 Hadoop native - 在 Maven 插件中发现错误

hadoop - 如果他有权访问 HDFS 中的表文件,那么对表没有 Sentry 权限的用户如何执行查询?

xml - 如何将xml文件加载到Hive中

sql - 使用链接服务器的 SQL 更新速度非常慢

mysql - 如何根据条件将数据从一张表插入到另一张表

Docker 中的 Hadoop 配置 - Datanode 无法连接

hadoop - mapreduce 的哪个部分/类是停止 reduce 任务的逻辑实现

json - hive中的多行JSON文件查询