Sql 从bigquery公共数据获取特定文件中的内容数据:github\u使用JOIN和WHERE返回不同的结果

Sql 从bigquery公共数据获取特定文件中的内容数据:github\u使用JOIN和WHERE返回不同的结果,sql,github,google-bigquery,Sql,Github,Google Bigquery,按名称从特定文件获取内容数据的最常见方法如下: SELECT * FROM [bigquery-public-data:github_repos.sample_contents] WHERE id IN (SELECT id FROM ( SELECT * FROM [bigquery-public-data:github_repos.sample_files] WHERE path = 'README.md' )) 这个查询给了我14557个结果 我认为运行下面的查询将得到相同数

按名称从特定文件获取内容数据的最常见方法如下:

SELECT *
FROM [bigquery-public-data:github_repos.sample_contents]
WHERE id IN (SELECT id FROM (
  SELECT *
  FROM [bigquery-public-data:github_repos.sample_files]
  WHERE path = 'README.md'
))
这个查询给了我14557个结果

我认为运行下面的查询将得到相同数量的结果:

SELECT contents.*
FROM [bigquery-public-data:github_repos.sample_contents] contents
INNER JOIN [bigquery-public-data:github_repos.sample_files] files
  ON contents.id = files.id 
WHERE files.path = 'README.md'
但最终结果是14645个结果

为什么这两个结果之间存在差异,并且其中一个是选择README.md文件内容数据的合适结果

编辑:


看起来未经修改的分叉文件在其他repos分叉中具有相同的id。

第一个查询将为您提供具有路径为'README.md'的文件的所有内容,无论该文件id在文件表中出现多少次

第二个查询为您提供的内容与文件表中相应文件的数量相同,这是因为JOIN

您可以在下面运行以验证这一点

选择准确的\u计数\u DISTINCTcontents.id 来自[bigquery公共数据:github\u repos.sample\u contents]内容 内部联接[bigquery公共数据:github\u repos.sample\u files]文件 ON contents.id=files.id 其中files.path='README.md'
是的,你说得对。值得一提的是,我的误解是因为假设files表中的id是唯一的,我认为contents.id=files.id是1对1的连接。现在我知道这个id是一个简单的文件内容哈希。在文档中,我在哪里可以找到此类信息?