这个奇怪的 BigQuery SQL 语法是如何工作的?
How does this odd BigQuery SQL syntax work?
我对 BigQuery 比较陌生,但我已经编写 SQL 多年了;所以你可以想象当我发现同事这样写的查询时我的惊讶:(简化)
SELECT
t1.user_id,
t2.value,
MAX(t1.order_id)
FROM orders t1,
(SELECT
value
FROM products) t2
WHERE t1.order_id > t2.value
GROUP BY 1, 2
他正在从两个 table 中进行选择,但没有加入它们 - 每个 table 只是用逗号分隔!这是 SQL 中的正常现象还是 BigQuery 独有的连接 shorthand?它是如何工作的?
它是标准的 SQL,适用于任何地方(至少 table 列表部分。GROUP BY 1, 2
并非适用于任何地方),并且与此相同:
SELECT
t1.user_id,
t2.value,
MAX(t1.order_id)
FROM orders t1
CROSS JOIN (
SELECT value
FROM products
) t2
WHERE t1.order_id > t2.value
GROUP BY 1, 2
如果您在 FROM
子句中列出多个 table,您将得到所有列出的 table 之间的叉积。
我对 BigQuery 比较陌生,但我已经编写 SQL 多年了;所以你可以想象当我发现同事这样写的查询时我的惊讶:(简化)
SELECT
t1.user_id,
t2.value,
MAX(t1.order_id)
FROM orders t1,
(SELECT
value
FROM products) t2
WHERE t1.order_id > t2.value
GROUP BY 1, 2
他正在从两个 table 中进行选择,但没有加入它们 - 每个 table 只是用逗号分隔!这是 SQL 中的正常现象还是 BigQuery 独有的连接 shorthand?它是如何工作的?
它是标准的 SQL,适用于任何地方(至少 table 列表部分。GROUP BY 1, 2
并非适用于任何地方),并且与此相同:
SELECT
t1.user_id,
t2.value,
MAX(t1.order_id)
FROM orders t1
CROSS JOIN (
SELECT value
FROM products
) t2
WHERE t1.order_id > t2.value
GROUP BY 1, 2
如果您在 FROM
子句中列出多个 table,您将得到所有列出的 table 之间的叉积。