【问题标题】:I am converting Oracle queries to Standard Bigquery, i am gettting error "IN subquery is not supported inside join predicate."我正在将 Oracle 查询转换为标准 Bigquery,我收到错误“连接谓词中不支持 IN 子查询”。
【发布时间】: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


【解决方案1】:

你可以这样试试吗:

Select * from (
     #Last part of the code
     INNER JOIN (
     SELECT
        DISTINCT `pearson-rr.oracle_grdw_grdw.he_project_assoc`.PARENT_ISBN 
        PARENT_ISBN,
        SUM (`pearson-rr.GRDW_RPT.PROJECT_GR_QTY`.GR_QTY) GR_QTY
     FROM
         `pearson-rr.oracle_grdw_grdw.he_project_assoc`
         INNER JOIN
         `pearson-rr.GRDW_RPT.PROJECT_GR_QTY`
     ON
        `pearson-rr.oracle_grdw_grdw.he_project_assoc`.child_ISBN = `pearson- 
        rr.GRDW_RPT.PROJECT_GR_QTY`.BIC_GCISBN
        AND `pearson-rr.oracle_grdw_grdw.he_project_assoc`.BREAK_LABEL <> 
      'Associated ISBNs'
      GROUP BY
        `pearson-rr.oracle_grdw_grdw.he_project_assoc`.PARENT_ISBN) xx
    ON
      yy.PARENT_ISBN = xx.PARENT_ISBN
      AND yy.CIRCULATION_INT < xx.GR_QTY
   ) AA
      where AA.PARENT_ISBN IN 
      ( SELECT
        DISTINCT _BIC_GCISBN
       FROM
        `pearson-rr.GRDW_RPT.BIC_GM_AGCPOAODS00_BO_VW`
      INNER JOIN
        `pearson-rr.oracle_grdw_boadmin.fiscal_bo`
      ON
        _BIC_ZC2GRIRIN = 'G'
        AND _BIC_ZCLOEKZ = ' '
        AND SUBSTR (BOUND_DATE, 1, 6) = `pearson- 
    rr.oracle_grdw_boadmin.fiscal_bo`.PRIOR_FISC_YEAR_MONTH )

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多