如何在标准SQL中查询满足特定条件的数组?

时间:2019-04-11 21:18:25

标签: sql arrays google-bigquery where

我正在尝试提取仅满足特定条件的记录。

例如,我只想要包含“ IAB3”的结果。

这是桌子的样子

表名称:

出价

列名:

BidderBanner / WinCat

条目:

1600402 / null
1911048 / null
1893069 / [IAB3-11, IAB3]
1214894 / IAB3

我最初的想法是

SELECT * FROM bids WHERE WinCat = "IAB3" 

但是出现一个错误,提示操作符类型数组,字符串不匹配。

该数据库位于Google Big Query中。

4 个答案:

答案 0 :(得分:2)

以下是用于BigQuery标准SQL

#standardSQL
SELECT * FROM `project.dataset.bids` WHERE 'IAB3' IN UNNEST(WinCat)

您可以使用问题中的示例数据来测试,玩游戏,如下例所示

#standardSQL
WITH `project.dataset.bids` AS (
  SELECT 1600402 BidderBanner, NULL WinCat UNION ALL
  SELECT 1911048, NULL UNION ALL
  SELECT 1893069, ['IAB3-11', 'IAB3'] UNION ALL
  SELECT 1214894, ['IAB3'] 
)
SELECT * FROM `project.dataset.bids` WHERE 'IAB3' IN UNNEST(WinCat)  

有结果

enter image description here

答案 1 :(得分:1)

您需要在sql中为所有字符串使用单引号。应该是WHERE WinCat ='IAB3'而不是WHERE WinCat =“ IAB3”

答案 2 :(得分:1)

一种方法使用unnest(),如下所示:

SELECT b.*
FROM bids b
WHERE 'IAB3' IN (SELECT unnest(b.WinCats))

但是,数组语法在支持它们的数据库之间有所不同,它们不属于“标准SQL”。

答案 3 :(得分:0)

这将起作用:

SELECT * FROM bids WHERE REGEXP_LIKE (WinCat, '(.)*(IAB3)+()*');