MySQL无法连接具有不同数据类型的不同数据库中的列

时间:2014-08-07 14:56:47

标签: mysql sql inner-join sqldatatypes

我在不同数据库的不同表中有两个表。

数据库1,表1:

Name | Data Type | Collation

id     BINARY      
count  INT(5)   

示例:

id                 count             
1caf69a993367281   3 

数据库2,表1

Name | Data Type | Collation  
id     VARCHAR     latin1_swedish_ci    
id2    INT(10)

示例:

id                 id2
1caf69a993367281   344

我需要做这样的事情

SELECT id, id2, count 
 FROM `Database 1`.`Table 1` 
 INNER JOIN `Database 2`.`Table 1` 
 USING(`id`)

此外,id存储为十六进制值(例如,1caf69a993367281)。 数据库1由开源工具(准确地称为Piwik)创建,并声明,"要从表1中获取id,您可以使用CONV(HEX(id)16,10)来获取其十进制值。

为方便起见,我试过

SELECT id, id2, count 
 FROM `Database 1`.`Table 1` 
 INNER JOIN `Database 2`.`Table 1` 
 ON CONV(HEX(`Database 1`.`Table 1`.`id`), 16, 10) = CONV(HEX(`Database 2`.`Table 1`.`id`), 16, 10)

这两个查询都给出了空结果。

2 个答案:

答案 0 :(得分:1)

显然我们需要在提到列的任何地方明确指定数据类型。特别是在二进制数据类型列。 像这样的事情 -

SELECT HEX(id), id2, count 
 FROM `Database 1`.`Table 1` a
 INNER JOIN `Database 2`.`Table 1` b
ON BINARY HEX(`a`.id) = BINARY UPPER(`b`.id)

答案 1 :(得分:0)

如果值已经是HEX且只是类型不同,那么我认为这可能会这样做

SELECT id, id2, count 
 FROM `Database 1`.`Table 1` 
 INNER JOIN `Database 2`.`Table 1` 
 ON CAST(`Database 1`.`Table 1`.`id` AS CHAR) = `Database 2`.`Table 1`.`id`