与领先的零

问题描述:

我有一个简单的查询选择查询......但有两个nocompatible表与领先的零

SELECT 
a.name 
b.occupation 
FROM table1 a 
LEFT JOIN table2 b 
ON a.ID = B.ID 

问题是Table 1和Table有数据

ID  ID 
HV  HV 
8  008 
13  013 
A5  A5 

请帮

您可以使用mysqls TRIM函数。

LEFT JOIN table2 b 
ON a.ID = TRIM(LEADING 0 FROM B.ID) 
+0

+1,这是比我的更好的解决方案,但它也破坏了索引。 – 2013-03-21 15:05:56

+0

是的,但我不知道如何保留索引,因为您必须以某种方式修改列以进行直接比较:•是否可以通过某种方式实现? – 2013-03-21 15:10:31

+0

此解决方案明确起作用,但两个表都是5K行+ – user2151863 2013-03-21 15:14:29

你可以通过在整数上下文中评估它们将这些值转换为其整数值:

SELECT 
a.name 
b.occupation 
FROM table1 a 
LEFT JOIN table2 b 
ON a.ID = B.ID+0 

但是这可能会破坏使用索引进行连接的任何机会。要进行优化,您必须在两个表中以兼容格式存储值。

+0

这不起作用,像'HV''和''A5'这样的条目将变成'0'。看到这里:http://www.sqlfiddle.com/#!2/a9a8f/1/0 – fancyPants 2013-03-21 15:04:58

+0

@tombom,是的,你是对的,我的解决方案是不够的。 – 2013-03-21 15:06:31