【问题标题】:SQL Syntax NOT IN for Google BigQueryGoogle BigQuery 的 SQL 语法不存在
【发布时间】: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 中选择列表键)

标签: google-bigquery


【解决方案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 可能以任意顺序连接结果,这可能是您无法获得预期匹配的原因。
猜你喜欢
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
  • 2017-03-10
  • 2023-01-31
相关资源
最近更新 更多