SQL-通过连接表本身在数据集中查找相同的数据

SQL-通过连接表本身在数据集中查找相同的数据,sql,google-bigquery,Sql,Google Bigquery,我试图编写一个sql查询,以找出以下内容- User_info column1 column2 userId1 pete katie katie pete john userId2 pete katie miles

我试图编写一个sql查询,以找出以下内容-

User_info   column1         column2
userId1     pete            katie    
            katie           pete     
                            john    


userId2     pete            katie    
                            miles    
                            jessica  
                            pete    

userId3     jessica         pete
            matt            katie
                            john
因此,假设我的数据在SQL中是按以下方式构造的,其中column1和column2基本上是record类型

如果column1中有一个名称不属于column2,那么我想基本上报告它

所以我的结果应该是

User_info   Count
userId1     0
userId2     0
userId3     2
userId1在第2列中有pete和katie,因此计数将为0

userId2在第2列中有pete,因此计数将为0

userId3在第2列中没有jessica或matt,因此计数将为2


任何关于我如何处理这个问题的IDE,不幸的是我在这里画了一个空白。谢谢你

我将分别测试每条记录,而不是设置一组差异,然后汇总:

with rec1 as (
  select userid, x
  from tbl 
  cross join unnest(tbl.column1) as x
), 
rec2 as (
  select userid, x
  from tbl 
  cross join unnest(tbl.column2) as x
), 
diff as (
  select * from rec1
  except 
  select * from rec2
)
select userid, count(1)
from diff
group by userid
order by userid 





下面是BigQuery标准SQL

#standardSQL
SELECT User_info, 
  (SELECT COUNT(1) FROM UNNEST(column1) value 
    WHERE NOT value IN (SELECT value FROM UNNEST(column2) value)
  ) Missing_count
FROM `project.dataset.table`   
如果要应用于您问题中的样本数据-结果为

Row User_info   Missing_count    
1   userId1     0    
2   userId2     0    
3   userId3     2    

我想你的第2栏和第1栏的逻辑是颠倒的。很抱歉反应太晚,我标出了正确的答案。