SQL 根据 BQ 中的二级 table 更新

SQL Update based on secondary table in BQ

我有2个table,第一个包含主体信息,第二个包含国家命名规则的信息。在信息 table 中,国家/地区由名称标识,我想更新此字符串以包含命名约定 table 中包含的 ISO alpha 3 值。例如转向“英国”->“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 之间的更新之外做了一个内部连接,以确保值是 compatable 并且它 returns 是正确的值,关于它为什么不正确的任何想法正在更新?

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

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

这不完全是一个答案。但是您的测试可能还不够。您需要检查值 不匹配的地方 。所以,对于 return 那些:

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;

我怀疑您会发现不匹配的国家/地区。因此,当您 运行 更新时,匹配项会在第一时间发生变化。然后不匹配项永远不会改变。