mysql varchar 更新,简单的MySQL加入varchar(100)字段不起作用

所以,我正在加入mysql以过滤掉一些不良数据,我遇到了这个奇怪的问题.

>两个表都通过payment_transaction_id连接.

>他们都有3463的价值.

>联接结果不返回任何行.

>两个表都有此值.

证明记录在card_transaction_log中:

select count(*)

from card_transaction_log

where payment_transaction_id = 3463;

>> 1

证明记录在交易中:

select count(*)

from transaction

where payment_transaction_id = 3463;

>> 1

但是加入不起作用.

select count(*)

from card_transaction_log a, transaction b

where a.payment_transaction_id = b.payment_transaction_id

and a.payment_transaction_id = 3463;

>> 0

老实说,我以前从未在mysql中见过这样的东西.我甚至和我的同事核实过,以确保我不会疯狂和/或愚蠢.

更新:

虽然这与上面相同,但此查询也不起作用:

select count(*)

from card_transaction_log a

join transaction b

on a.payment_transaction_id = b.payment_transaction_id

where a.payment_transaction_id = 3463;

>> 0

解决方法:

payment_transaction_id是什么类型的?我怀疑它不是INT而是VARCHAR.

如果您尝试将VARCHAR与INT进行比较,MySQL会自动将其转换为INT,但可能会发生一些奇怪的事情,例如:

'3463' = 3463

但是也

'3463a' = 3463

'3463a' != '3463b'

请参阅小提琴here.您可以像这样测试您的查询:

select count(*)

from card_transaction_log

where payment_transaction_id = '3463';

并且我怀疑至少有一个查询将返回0.或者您可以强制您的联接使用整数值:

select count(*)

from card_transaction_log a

join transaction b

on a.payment_transaction_id+0 = b.payment_transaction_id+0

where a.payment_transaction_id = 3463;

标签:mysql

来源: https://codeday.me/bug/20190612/1229169.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值