导致此错误的相关子查询 - LEFT OUTER JOIN 不能在没有连接两侧字段相等的条件下使用

The*_*yes 5 sql google-bigquery

在 BigQuery 中使用 WHERE 子句编写相关子查询时,会导致错误。LEFT OUTER JOIN 不能在没有条件是连接两侧的字段相等的情况下使用。

但是它在其他 SQL 引擎中工作,我不理解错误或如何重写查询。

相同类型的不同查询导致相同的错误。

SELECT
  out.*
FROM
  `august-monolith-205810.Assignment.students` AS out
WHERE
  2 >= (
  SELECT
    COUNT(*)
  FROM
    `august-monolith-205810.Assignment.students` AS t1
  WHERE
    out.age < t1.age)
Run Code Online (Sandbox Code Playgroud)

报告最多比其他两个学生大的学生。

Mik*_*ant 4

以下是 BigQuery 标准 SQL

#standardSQL
SELECT * EXCEPT(cnt)
FROM (
  SELECT *, COUNT(1) OVER(ORDER BY age RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) cnt
  FROM `august-monolith-205810.Assignment.students` 
)
WHERE cnt BETWEEN 1 AND 2
Run Code Online (Sandbox Code Playgroud)

另一种效果较差,因此不推荐,但仍然是一种选择,那就是使用 CROSS JOIN 来模仿非等式 LEFT JOIN

#standardSQL
SELECT ANY_VALUE(out).*
FROM `august-monolith-205810.Assignment.students` AS out
CROSS JOIN `august-monolith-205810.Assignment.students` AS t1
WHERE out.age > t1.age 
GROUP BY out.id
HAVING COUNT(t1.age) <= 2
Run Code Online (Sandbox Code Playgroud)