【问题标题】:LEFT JOIN IN BIG QUERY WITH DUPLICATESLEFT JOIN 与重复的大查询
【发布时间】: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 可能应该是主键,这意味着它不应该为空,也不应该重复。我看不到您的数据,因此这可能是一种特殊情况,但值得注意。

标签: google-bigquery


【解决方案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的存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多