基于BQ中的辅助表的SQL更新



我有两个表,一个表包含信息主体,第二个表包含关于国家命名惯例的信息。在信息表中,国家由名称标识,我想更新此字符串以包含命名约定表中包含的ISO alpha 3值。例如转动";英国"->quot;GBR";

我已经编写了以下查询来进行更新,但它影响了0行

UPDATE 
`db.catagory.test_votes_ds`
SET 
`db.catagory.test_votes_ds`.country =  `db.catagory.ISO-Alpha`.Alpha_3_code
FROM
`db.catagory.ISO-Alpha`
WHERE 
`LOWER(db.catagory.ISO-Alpha`.Country) = LOWER(`db.catagory.test_votes_ds`.country) 

我已经在2之间的更新之外进行了内部连接,以确保值是兼容的,并且它返回正确的值,有没有关于为什么不更新的想法?

下面列出了用于验证结果的联接,以及结果:

SELECT 
`db.catagory.test_votes_ds`.country, `db.catagory.ISO-Alpha`.Alpha_3_code
from 
`db.catagory.test_votes_ds`
inner join 
`db.catagory.ISO-Alpha` 
on 
LOWER(`db.catagory.test_votes_ds`.country) = LOWER(`db.catagory.ISO-Alpha`.Country)
1,Ireland,IRL
2,Australia,AUS
3,United States,USA
4,United Kingdom,GBR

这并不完全是一个答案。但你的测试可能还不够。您需要检查的值与不匹配的地方。所以,要返回这些:

select tv.*
from `db.catagory.test_votes_ds` tv left join
`db.catagory.ISO-Alpha` a
on LOWER(tv.country) = LOWER(a.Country)
where a.Country IS NULL;

我怀疑你会发现不匹配的国家。因此,当您运行更新时,匹配项将在第一次更改。那么不匹配的情况就永远不会改变。

最新更新