4

だから、私は 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
4

4 に答える 4

8

は何型payment_transaction_idですか?INTではなくVARCHARだと思います。VARCHAR を INT と比較しようとすると、MySQL は自動的にそれを INT にキャストしますが、次のような奇妙なことが起こる可能性があります。

'3463' = 3463

だけでなく、

'3463a' = 3463

しかし

'3463a' != '3463b'

ここでフィドルを参照してください。次のようにクエリをテストできます。

select count(*)
from card_transaction_log 
where payment_transaction_id = '3463';

クエリの少なくとも 1 つが 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;
于 2013-05-13T23:25:58.733 に答える
1

私の場合、これはデータに隠された文字が原因であることが判明しました。

以下を使用して、メールのリストを含む CSV をインポートしました。

LOAD DATA INFILE 'c:/temp/users.csv' 
INTO TABLE cloudusers 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 0 ROWS;

その結果、各 VARCHAR の末尾に改行文字がありました。文字列は同一に見えましたが、そうではありませんでした。

を使用してインポートを再実行したとき

LOAD DATA INFILE 'c:/temp/users.csv' 
INTO TABLE cloudusers 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 0 ROWS;

('\n' ではなく '\r\n' に注意してください) 結果の VARCHAR はその後一致し、すべての結合が機能しました。

于 2019-12-12T17:49:56.530 に答える
0

試すことができますか:

select count(*)
from card_transaction_log a
join transaction b
on a.payment_transaction_id = b.payment_transaction_id
where a.payment_transaction_id = 5081483008;
于 2013-05-13T23:11:51.010 に答える