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

标签 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)

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

最佳答案

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

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)

关于MySQL无法连接来自具有不同数据类型的不同数据库的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25185722/

相关文章:

sql - Postgresql 为什么 INNER JOIN 比 WHERE 慢很多

mysql - 从包含在sql中用分号分隔的数组的列中检索任何一个最大值

mysql - Regexp - 反向引用,将代码从 PHP 转换为 MySQL

.net - .NET TableAdapter查询中的Mysql LIMIT语句

sql - 如何从 Reporting Services 2005 的 Count() 函数中排除空值?

mysql - 正确的查询 MySQL 使用 WHERE ON INNER JOIN 正确的顺序和语法

PHP 动态表正在复制我的 mysql 表中的信息

mysql - 如何动态更改where子句中的列?

sql - 盘点记录问题

sql - Linux 上的 Postgres 文字回车错误