所以,我正在加入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