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

问题描述 投票:1回答:4

我试图拉出阵列只满足一定条件的记录。

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

这是表格的样子

Table Name:

投标

Column Names:

BidderBanner / WinCat

Entries:

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

我最初的想法是什么

SELECT * FROM bids WHERE WinCat = "IAB3" 

但我得到一个错误,表示运算符类型数组,字符串不匹配。

该数据库位于Google Big Query中。

sql arrays google-bigquery where
4个回答
2
投票

以下是BigQuery Standard 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
投票

你需要在sql中使用单引号来表示所有字符串。它应该是WHERE WinCat ='IAB 3'不是WHERE WinCat =“IAB 3”


1
投票

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

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

但是,数组语法因支持它们的数据库而异,并且它们不属于“标准SQL”。


0
投票

这将工作:

SELECT * FROM bids WHERE REGEXP_LIKE (WinCat, '(.)*(IAB3)+()*'); 
© www.soinside.com 2019 - 2024. All rights reserved.