我有两个表,一个表包含信息主体,第二个表包含关于国家命名惯例的信息。在信息表中,国家由名称标识,我想更新此字符串以包含命名约定表中包含的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;
我怀疑你会发现不匹配的国家。因此,当您运行更新时,匹配项将在第一次更改。那么不匹配的情况就永远不会改变。