LEFT JOIN 与重复的大查询
Posted
技术标签:
【中文标题】LEFT JOIN 与重复的大查询【英文标题】:LEFT JOIN IN BIG QUERY WITH DUPLICATES 【发布时间】:2021-06-07 15:28:27 【问题描述】:我的表有重复的 ID,但我想知道两者之间匹配的 ID。 table1 中的哪些不在 table2 中。
Table1 中的 ID 也是 INTEGER,table2 中的 ID 是 STRING,这就是我使用 cast 的原因
SELECT cast(T1.ID as STRING) as ID
FROM `project.dataset.table1` as T1 WHERE ID is not null
LEFT JOIN
SELECT DISTINCT(T2.ID) as ID
FROM `project.dataset.table2` as T2 WHERE ID is not null
ON T1.ID = T2.ID
我分别运行这两个查询,它们没问题,但是当我尝试创建左连接时它显示此错误
大查询错误:
Syntax error: Expected end of input but got keyword LEFT at [3:1]
我已经尝试过这个问题BigQuery Full outer join producing "left join" results
#standardSQL
SELECT COUNT(DISTINCT T1.NPI)
FROM `project.dataset.table1` as T1 WHERE NPI is not null
JOIN `project.dataset.table2` as T2 WHERE NPI is not null
ON T1.NPI= T2.NPI
还有更多错误。
你能指导我吗?
【问题讨论】:
WHERE ID is not null
通常会出现在您的 FROM
语句之后。我怀疑这就是您看到该错误的原因,WHERE
应该在最后。我还要注意表中的“重复 ID”和“空 ID”是一个不好的迹象。 ID 可能应该是主键,这意味着它不应该为空,也不应该重复。我看不到您的数据,因此这可能是一种特殊情况,但值得注意。
【参考方案1】:
改用EXCEPT:
SELECT cast(T1.ID as STRING) as ID
FROM `project.dataset.table1` as T1 WHERE ID is not null
EXCEPT
SELECT DISTINCT(T2.ID) as ID
FROM `project.dataset.table2` as T2 WHERE ID is not null
【讨论】:
非常感谢,不知道EXCEPT的存在以上是关于LEFT JOIN 与重复的大查询的主要内容,如果未能解决你的问题,请参考以下文章