我在不同数据库的不同表中有两个表。
数据库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)
这两个查询都给出了空结果。
答案 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`