首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使BigQuery在具有IN而不是IN的重复字符串字段上进行筛选?

如何使BigQuery在具有IN而不是IN的重复字符串字段上进行筛选?
EN

Stack Overflow用户
提问于 2021-04-20 09:58:41
回答 2查看 369关注 0票数 1

我正在尝试使用重复字符串字段筛选BigQuery表中的行。我希望基于至少有一个来自一个预定义列表的值的行进行筛选,但不包含来自第二个预定义列表的任何值。

这是我的疑问:

代码语言:javascript
运行
复制
   SELECT em.asin, em.category 
    FROM 
        `my_proj.amazon_data.electronics_meta` as em,
        UNNEST(em.category) as sub_cat
    WHERE sub_cat IN ('Television & Video', 'Televisions', 'Television & Video')
    AND sub_cat NOT IN (
        'DVD Players & Recorders',
        'Projection Screens',
        'VCRs',
        'Blu-ray Players',
        'Blu-ray Players & Recorders'
    )

这就是我得到的结果:

我希望第一行不会出现,因为它包含category字段中的“录像机”。

我也试过

代码语言:javascript
运行
复制
AND LOWER(TRIM(sub_cat)) NOT IN (
        'dvd players & recorders',
        'projection screens',
        'vcrs',
        'blu-ray players',
        'blu-ray players & recorders'
    )

代码语言:javascript
运行
复制
    AND NOT (sub_cat IN (
        'DVD Players & Recorders',
        'Projection Screens',
        'VCRs',
        'VCRs',
        'Blu-ray Players',
        'Blu-ray Players & Recorders'
    ))

但这并没有改变结果。

附加信息:--这是表的架构:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-20 10:06:08

使用存在性

代码语言:javascript
运行
复制
SELECT em.asin, em.category 
FROM 
  `my_proj.amazon_data.electronics_meta` as em
WHERE 
  exists ( select *
           from unnest(category) as sub_cat
           where sub_cat IN ('Television & Video', 'Televisions', 'Television & Video')
         )
  and not exists ( select *
                   from unnest(category) as sub_cat
                   where sub_cat IN (
                     'DVD Players & Recorders',
                     'Projection Screens',
                     'VCRs',
                     'Blu-ray Players',
                     'Blu-ray Players & Recorders'
                   )
                 )
票数 1
EN

Stack Overflow用户

发布于 2021-04-20 11:00:00

您还可以在FROM子句中使用聚合来完成此操作:

代码语言:javascript
运行
复制
SELECT em.asin, em.category 
FROM `my_proj.amazon_data.electronics_meta` em CROSS JOIN
     (SELECT COUNTIF(sub_cat IN ('Television & Video', 'Televisions', 'Television & Video')) as cnt_required,
             COUNTIF( 'DVD Players & Recorders', 'Projection Screens', 'VCRs', 'Blu-ray Players', 'Blu-ray Players & Recorders'
                    ) as cnt_not_allowed
      FROM unnest(category) cat
     ) c
WHERE c.cnt_required > 0 AND c.cnt_not_allowed = 0;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67176650

复制
相关文章

相似问题

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