按名称从特定文件bigquery-public-data:github_repos获取内容数据的最常用方法如下:
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(forks)中具有相同的id。
答案 0 :(得分:1)
首次查询为您提供包含路径=' README.md'无论文件表中存在多少次文件ID
由于JOIN
,第二个查询为文件表中的相应文件提供了相同的内容您可以在下方运行以验证此
SELECT EXACT_COUNT_DISTINCT(contents.id)
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'