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
适用于 BigQuery 的 Google Apps 脚本(标准 SQL)- NaN
google bigquery SQL group by 聚合函数