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 与重复的大查询的主要内容,如果未能解决你的问题,请参考以下文章

left join关联查询一对多数据重复问题解决方案

从 LEFT JOIN 查询中删除重复项

MySQL Left join 无法在单个查询中删除重复项

SQL left join 数据重复

mysql left join 右表存在重复数据,怎么处理

left join 右表多条数据重复