如何比较数据库中不同格式的ID

时间:2016-01-13 23:04:50

标签: mysql sql casting

问题:我需要一种方法来将类型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'转换为整数。

那怎么说呢

  • FOR {仅} tempDB.ids.id_dirty可以成功转换为int的值
  • licensing.articles
  • 中选择匹配的记录
  • 并将licensing.articles.id复制到tempDB.ids.id_clean

0 个答案:

没有答案