【发布时间】:2019-12-19 17:10:58
【问题描述】:
我已将 oracle 查询转换为低于标准 bq 但在最后一条语句中 (IN subquery)。我收到错误:
“在连接谓词中不支持 IN 子查询。”
请在下面的代码中告知如何在 bq 中使用 IN 子查询
#Last part of the code
INNER JOIN (
SELECT
DISTINCT `domain-rr.oracle_DB_DB.he_project_assoc`.PARENT_ISBN
PARENT_ISBN,
SUM (`domain-rr.DB_RPT.PROJECT_GR_QTY`.GR_QTY) GR_QTY
FROM
`domain-rr.oracle_DB_DB.he_project_assoc`
INNER JOIN
`domain-rr.DB_RPT.PROJECT_GR_QTY`
ON
`domain-rr.oracle_DB_DB.he_project_assoc`.child_ISBN = `domain-
rr.DB_RPT.PROJECT_GR_QTY`.BIC_GCISBN
AND `domain-rr.oracle_DB_DB.he_project_assoc`.BREAK_LABEL <>
'Associated ISBNs'
GROUP BY
`domain-rr.oracle_DB_DB.he_project_assoc`.PARENT_ISBN) xx
ON
yy.PARENT_ISBN = xx.PARENT_ISBN
AND yy.CIRCULATION_INT < xx.GR_QTY
AND yy.PARENT_ISBN IN
( SELECT
DISTINCT _BIC_GCISBN
FROM
`domain-rr.DB_RPT.BIC_GM_AGCPOAODS00_BO_VW`
INNER JOIN
`domain-rr.oracle_DB_boadmin.fiscal_bo`
ON
_BIC_ZC2GRIRIN = 'G'
AND _BIC_ZCLOEKZ = ' '
AND SUBSTR (BOUND_DATE, 1, 6) = `domain-
rr.oracle_DB_boadmin.fiscal_bo`.PRIOR_FISC_YEAR_MONTH )
【问题讨论】:
-
这里不需要做 SELECT DISTINCT,因为 GROUP BY 不返回重复项。
-
今日提示:始终使用现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),如果需要更容易转换为外连接 -
WHERE / GROUP BY / ON 部分无效。而且我不知道你想做什么。
-
我已经编辑了代码的最后一部分。当我将代码保存在 bq 中时,它会抛出错误“连接谓词中不支持 IN 子查询。”
-
尝试将 'ON ... AND foo IN bar' 替换为 'ON ... WHERE foo IN bar'。看起来 IN 并不是真正的连接条件。
标签: sql google-bigquery