如何执行类型严格的JOIN

时间:2019-06-19 22:34:43

标签: mysql sql join

我想离开2个表。
表A有我的参考数据,其ID为整数类型。
表B存储了我的数据,其中一列具有指向我的参考表的松散链接。这意味着它可以保存其他表中的ID或任意文本。
我想执行查询,将它们连接在一起,并仅在找到具有匹配ID的记录时显示参考表中的数据。

一个简化的示例(MCVE):

CREATE TABLE a 
  ( 
     id INT 
  ); 

INSERT INTO a VALUES (5); 

CREATE TABLE b 
  ( 
     id VARCHAR(10) 
  ); 

INSERT INTO b VALUES ('5sdf');

我尝试了以下查询:

SELECT * FROM a LEFT JOIN b USING(id)

但是结果是5,这不是我期望的,因为值不同-http://www.sqlfiddle.com/#!9/6c5965/1

我还尝试了显式ON子句:

SELECT * FROM a LEFT JOIN b ON a.id=b.id

但是这个也加入了。 -http://www.sqlfiddle.com/#!9/6c5965/2/0

如何在不隐式转换的情况下将具有不同数据类型的列的两个表连接起来?

1 个答案:

答案 0 :(得分:2)

加入时将整数转换为字符串,而不是依赖于隐式转换,而隐式转换则以其他方式默认。

SELECT * FROM a LEFT JOIN b ON CAST(a.id AS CHAR) = b.id;

fiddle