问题:我需要一种方法来将类型varchar
的ID与类型int
的ID进行比较。
背景:我有一个几乎映射到我表中的ID的ID列表。我有~10k ids,但我怀疑只有3-5种变化要清理。
我正在使用的表格可以简化如下。一张带有好id的文章和一张临时表的大表我把所有脏ID都丢进了。每当我能够匹配时,我想用正确的id更新我的临时表
licensing.articles
+----------+
| id (int) |
+----------+
| 1000 |
| 1001 |
| 1002 |
+----------+
tempDB.ids
+-------------------+----------------+
| id_dirty (string) | id_clean (int) |
+-------------------+----------------+
| 1000Z | |
| R1001 | |
| 1002 | |
+-------------------+----------------+
所以我的第一个查询是简单版本:对于在licensing.articles
表和tempDB.ids
表之间共享相同ID的记录,我想用良好的id填充tempDB.ids.id_clean
。 (在我的例子中,有一个共享id(1002),但实际上可能有大约3k。)
当我尝试这样的事情时:
UPDATE tempDB.ids AS dirty
JOIN licensing.articles clean ON clean.id = CAST(dirty.id_dirty as unsigned)
SET dirty.id_clean = clean.id
WHERE isnull(dirty.id_clean);
我收到错误消息Error : Truncated incorrect INTEGER value: '1000Z'
。那讲得通;可能是它无法将'1000Z'转换为整数。
那怎么说呢
tempDB.ids.id_dirty
可以成功转换为int的值licensing.articles
licensing.articles.id
复制到tempDB.ids.id_clean