Google BigQuery 的 SQL 语法不存在

Posted

技术标签:

【中文标题】Google BigQuery 的 SQL 语法不存在【英文标题】:SQL Syntax NOT IN for Google BigQuery 【发布时间】:2012-07-30 20:54:08 【问题描述】:

可在此处找到 Google SQL 语法指南 https://developers.google.com/bigquery/docs/query-reference 似乎没有解决 NOT IN 术语的使用问题。

我得到了错误

Query Failed
Error: Encountered "" at line 0, column 0. Was expecting one of:  

(然后 Google 在“one of”之后什么都没有列出)

当我的查询是

SELECT ageinmonths,amountborrowed,borrowerrate,creationdate,creditgrade,
       debttoincomeratio,groupkey,key,lenderrate,listingkey,modifieddata,
       originationdate,prosperrating,status,term
FROM prosperloans1.loans2 as big,
     prosperloans1.dupelistingkeysinloans2 as small
WHERE big.listingkey NOT IN small.listingkey

“小”表有 14 行。大表有 57K 行。

有什么想法吗? 不确定 Google SQL 是否支持 NOT IN。

谢谢 肖恩

【问题讨论】:

使用in 和不使用in 不需要括号吗?例如select * from dual where id not in (1, 2, 3) 这似乎有效:SELECT ageinmonths,amountborrowed,borrowerrate,creationdate,creditgrade,debttoincomeratio,groupkey,key,lenderrate,listingkey,modifieddata,originationdate,prosperrating,status,term FROM prosperloans1.loans2 WHERE listingkey NOT IN(从 prosperloans1.dupelistingkeysinloans2 中选择列表键) 【参考方案1】:

半连接和反连接使用以下语法: SELECT field FROM table WHERE field [NOT] IN (SELECT other_field FROM other_table WHERE foo = 'bar')

因此,您使用子选择更新的查询是正确的版本。

【讨论】:

运行与字符串列表不匹配的查询也很有用,例如:SELECT word, COUNT(*) as word_count from publicdata:samples.shakespeare WHERE word NOT IN ('the' , 'and', 'i', 'to', 'of', 'a') GROUP BY word ORDER BY word_count DESC IGNORE CASE; 我不确定是否可以使用 WHERE field [NOT] IN (SELECT GROUP_CONCAT(other_field) FROM other_table)WHERE field [NOT] IN(从 other_table 中选择 other_field)。这对我有帮助,但不确定为什么 GROUP_CONCAT 不起作用。 您如何使用 GROUP_CONCAT?这只会生成一个带有连接组值的逗号分隔的字符串值。您是否希望这与外部查询中的字段匹配? GROUP_CONCAT 可能以任意顺序连接结果,这可能是您无法获得预期匹配的原因。

以上是关于Google BigQuery 的 SQL 语法不存在的主要内容,如果未能解决你的问题,请参考以下文章

Google Bigquery - 运行参数化查询 - php

Google BigQuery SQL:使用数组?

适用于 BigQuery 的 Google Apps 脚本(标准 SQL)- NaN

google bigquery SQL group by 聚合函数

sql 脚本适用于 MySQL,但不适用于 google bigquery

无法在 Google BigQuery 中将此旧版 SQL 转换为标准 SQL