1

あるテーブルにはあるが別のテーブルにはないいくつかの値を見つけるための非常に単純なクエリがあります。

select * from my_table were my_value in
   ('one','two','hello','blue')
and my_value not in
   (select my_value from my_table_2)

これにより、2つの行が返されます。my_tableの行は「one」と「two」です。

しかし、それから私はこれを実行しました:

select * from my_table_2 where my_value in ('one','two')

そして、これがmy_table_2に「one」と「two」の値を持つ2つの行を返すことを発見してショックを受けました。

「入っていない」は正しいものの99%を取得していますが、いくつかの値がランダムに欠落しています。これの原因は何ですか?

編集:申し訳ありませんが、タイプミス。修正しました。

4

2 に答える 2

2

この問題の原因は、2 つのテーブルの列タイプの違いでした。

my_table は varchar2(10) を使用していましたが、my_table_2 は char(10) を使用していました。その結果、my_table_2 は実際には my_table_1 の内容といくつかのスペースを返しています。興味深いことに、たとえば 'apple' は 'apple ' になりますが、my_value = 'apple' が行を返す my_table_2 から my_value を選択します。

于 2012-12-20T20:36:31.230 に答える