【问题标题】:confused with INNER JOIN and FULL JOIN with temporary table与临时表的 INNER JOIN 和 FULL JOIN 混淆
【发布时间】:2021-10-24 03:21:32
【问题描述】:
WITH 
longest_used_bike AS (
    SELECT 
        bikeid,
        SUM(duration_minutes) AS trip_duration
    FROM 
        `bigquery-public-data.austin_bikeshare.bikeshare_trips`
    GROUP BY 
        bikeid
    ORDER BY 
        trip_duration DESC 
    LIMIT 1
)

-- find station at which longest_used bike leaves most often

SELECT 
trips.start_station_id,
COUNT(*) AS trip_ct
FROM 
longest_used_bike AS longest
INNER JOIN 
`bigquery-public-data.austin_bikeshare.bikeshare_trips` AS trips
ON longest.bikeid = trips.bikeid
GROUP BY 
trips.start_station_id
ORDER BY
trip_ct DESC 
LIMIT 1

这个查询会给你一个 2575 的结果,但是当你使用全连接而不是内连接时,为什么结果会变成 3798?我想弄清楚那个是什么,但我不知道该怎么想

【问题讨论】:

  • 请在sqlfiddle.com 上创建一个复制品,以便我们和您可以充分测试和实验

标签: sql google-bigquery inner-join temp-tables


【解决方案1】:

INNER JOIN 将仅返回满足 JOIN 条件的行。所以只有在两个表中都有我们的行。

FULL JOIN 将返回左侧的所有行和右侧的所有行,在没有 natch 的字段中具有空值。

【讨论】:

    【解决方案2】:

    完全连接将包括 trips 表中的所有条目 - 无论它们是否可连接到 longest_used_bike ID(对于 longest 中的列,它们将具有 NULL 值)

    有关连接类型的说明,另请参阅 here

    提示:如果您遇到类似的情况,请尝试查看未聚合的查询(省略 GROUP BY 子句和 COUNT 函数) - 然后您会注意到这里您会突然在 FULL 中有更多(不需要的)行JOIN 查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-18
      • 2020-03-07
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      相关资源
      最近更新 更多