首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不创建重复记录的连接

不创建重复记录的连接
EN

Stack Overflow用户
提问于 2020-02-08 05:23:05
回答 2查看 52关注 0票数 0

我有两个表产品表和类别表。下面是category表的外观-

代码语言:javascript
复制
Product_ID     Category             sub-category     
   123         Furniture             Bookcases             
   123         Furniture             Chairs                
   456         Office supplies       Labels                
   456         Office supplies       Binders               
   456         Office supplies       Binders

产品表如下所示-

代码语言:javascript
复制
Product_ID   Quantities_sold
   123           300
   456           400

当我内部连接产品和类别表时,我看到许多重复项,因为有不同的子类别,如下所示-

代码语言:javascript
复制
Product_ID     Category             sub-category     Quantities_sold
   123         Furniture             Bookcases             300
   123         Furniture             Chairs                300
   456         Office supplies       Labels                400
   456         Office supplies       Binders               400
   456         Office supplies       Binders               400

预期的结果将类似于-

代码语言:javascript
复制
Product_ID     Category             sub-category     Quantities_sold
   123         Furniture             Bookcases             300
                                     Chairs                
   456         Office supplies       Labels                400
                                     Binders               

有没有办法既有所有子类别又没有重复记录?

注意-我有一个巨大的数据集,有数百万条记录,26个类别和135个子类别。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-08 05:32:57

下面是针对BigQuery标准SQL的说明

代码语言:javascript
复制
#standardSQL
SELECT Product_ID, Category, SubCategories, Quantities_sold
FROM `project.dataset.product` p
LEFT JOIN (
  SELECT Product_ID, Category, STRING_AGG(DISTINCT SubCategory ) SubCategories
  FROM `project.dataset.category`
  GROUP BY Product_ID, Category
) c
USING (Product_ID)  

如果要应用于问题结果中的样本数据,则

代码语言:javascript
复制
Row Product_ID  Category        SubCategories       Quantities_sold  
1   123         Furniture       Bookcases,Chairs    300  
2   456         Office supplies Labels,Binders      400   

或者使用ARRAY_AGG而不是STRING_AGG来获取数组形式的子类别,如下例所示

代码语言:javascript
复制
#standardSQL
SELECT Product_ID, Category, SubCategories, Quantities_sold
FROM `project.dataset.product` p
LEFT JOIN (
  SELECT Product_ID, Category, ARRAY_AGG(DISTINCT SubCategory ) SubCategories
  FROM `project.dataset.category`
  GROUP BY Product_ID, Category
) c
USING (Product_ID)   

在这种情况下,结果将如下所示

代码语言:javascript
复制
Row Product_ID  Category        SubCategories   Quantities_sold  
1   123         Furniture       Bookcases       300  
                                Chairs       
2   456         Office supplies Labels          400  
                                Binders      
票数 2
EN

Stack Overflow用户

发布于 2020-02-08 05:40:52

您可以使用SELECT DISTINCT,它不会向您显示重复记录,如下所示:

代码语言:javascript
复制
SELECT DISTINCT Product_ID, Category, sub-category, Quantities_sold
FROM product, category
INNER JOIN category ON category.Product_ID = product.Product_ID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60121252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档