[英]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.