select b.*, a.id_order
FROM trans a
INNER JOIN shipment b
ON a.id_order = b.trans_order_id
即使两列的值都不同,它仍然会加入该行。
例如,下面是奇怪的组合
trans_order_id= "6229582 8481 AB"
和id_order ='6229582'
两个值都不相同,但MySQL仍然让他们加入
两个列都具有不同的数据类型
b.trans_order_id varchar(45)
a.id_order int(10)
我尝试过Cast,转换(No Use)
请帮助我告诉我是否有任何解决此类问题的方法。
答案 0 :(得分:0)
那是你的MySql:/
我的猜测trans.id_order
有某种类型的数字类型,而MySql正在静默地将shipment.trans_order_id
从字符串类型转换为连接比较的数字类型。
除了MySql之外,几乎没有其他数据库可以尝试这一点,我相信新安装 5.7之后的默认行为也可以更好地处理这个问题,但即使您运行的是最新的8.01如果数据库是原始安装的,那么你会看到这个,然后从5.7之前的版本升级。
您可以通过将a.id_order
显式地转换为shipment.trans_order_id
中使用的任何varchar类型来避免这种情况,这样MySql就不会强制表达式的错误一面。
您可能在shipment
表格上设置了较差的架构设计,您尝试将多个值放入一个列中。