这个奇怪的 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 之间的叉积。