繁体   English   中英

Google BigQuery:加入加入别名

[英]Google BigQuery: join on an join Alias

我尝试对作为其他连接结果的表执行连接。 但我收到错误消息:表“join_1”必须使用数据集(例如 dataset.table)进行限定。 我把问题加粗了。 非常感谢。

我怎样才能限定表 join_1? 我编辑了表格,希望有助于更多地理解问题。 非常感谢,你们回复这么快,你们真棒。

SELECT
  *
FROM (

SELECT
  *
FROM
  `prod.box.records` AS records


LEFT JOIN 

  `prod.box.record_updates` as updates

USING
  (c2)

WHERE c11 ="view") AS join_1

INNER JOIN

(
  SELECT
    c1,
    c6,
    c2
  FROM (
    SELECT
      c1,
      IFNULL(c4,c3) AS c6,
      c2,
      c7
    FROM (
      SELECT
        c1,
        c2,
        c3,
        c4,
        c5
      FROM
        **join_1**)

    LEFT JOIN
(
      SELECT
        c1,
        c2,
        MAX(c5) AS c5,
        "TRUE" AS c7
      FROM
        join_1
      GROUP BY
        c5,
        c2)
    USING
      (c2, c1, c5)
    GROUP BY
      c1,
        c6,
        c2,
      c7
    HAVING
      c7 = "TRUE")) AS status


USING
  (c2,
    c1)

...

如果需要多次使用子查询,请使用 CTE WITH语句。

WITH
records as (Select 1 c2,1 c1,3 c3,4 c4,5 c5),
record_updates as (Select 1 c2,"view" c11),
join_1 as
(
SELECT * FROM records AS records
LEFT JOIN record_updates as updates
USING (c2)
WHERE c11 ="view"
)

Select * from join_1
INNER JOIN
(
  SELECT
    c1,
    c6,
    c2
  FROM (
    SELECT
      c1,
      IFNULL(c4,c3) AS c6,
      c2,
      c7
    FROM (
      SELECT
        c1,
        c2,
        c3,
        c4,
        c5
      FROM
        join_1)

    LEFT JOIN
(
      SELECT
        c1,
        c2,
        c5,
        "TRUE" AS c7
      FROM
        join_1
      GROUP BY
        c5,
        c2, c1)
    USING
      (c2, c1, c5)
    GROUP BY
      c1,
        c6,
        c2,
      c7
    HAVING
      c7 = "TRUE")) AS status


USING
  (c2,
    c1)

我找到了我的问题的答案,但我只能找到它,因为你的“with clause”提示,samuel。 所以,非常感谢,塞缪尔。 但我会在这里发布答案,我已将所有连接放入 With 子句中,这只是我在 SELECT 中所做的最后一个。

with 
join_1 as (
SELECT *
FROM
prod.box.records AS records
LEFT JOIN
prod.box.record_updates AS updates
USING
(c2)
WHERE c11 ="view"), status as (
SELECT
    c1,
    c6,
    c2
  FROM (
    SELECT
      c1,
      IFNULL(c4,c3) AS c6,
      c2,
      final_status
    FROM (
      SELECT
        c1,
        c2,
        c3,
        c4,
        c5
      FROM
        join_1)
    LEFT JOIN (
      SELECT
        c1,
        c2,
        c5,
        "TRUE" AS final_status
      FROM
        join_1
      GROUP BY
        c5,
        c2)
    USING
      (c2, c1, c5)
    GROUP BY
      c1,
        c6,
        c2,
      final_status
    HAVING
      final_status = "TRUE")

USING
  (c2,
    c1))
SELECT
  *
FROM join_1
INNER JOIN
status
USING
  (c2,
    c1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM