2017-06-26 16 views
1

私は間違っていると知っている結果を返す次のクエリを持っています。しかし、私の構文で何がオフになっているか分からない。文字列のリストのSQL INを照会

select * from SJT_USER where SJT_USER_NAME in 
    (select USER_NAME from NON_MEMBER); 

SJT_USER_NAMEタイプNCHAR(255 CHAR)

USER_NAMEタイプNVARCHAR2(255 CHAR)

私はNCHARへNVARCHAR2からいくつかの変換を行う必要があります推測しています。

+0

これまで両方の回答が問題を解決している可能性がありますが、これが1回以上の場合は、外部キーを使用して2つのテーブルを結合することを検討する必要があります。 –

答えて

0

SQLキャストを試して、リンゴとリンゴを比較してみましょう。私はあなたが使用しているDBMSたかどうか分からないが、構文は次のようになります。

select * from SJT_USER where SJT_USER_NAME in (select CAST(USER_NAME AS NVARCHAR2) from NON_MEMBER); 
0

A CHARまたはNCHARは、それが255個の文字をいっぱいになるようSJT_USER_NAMEは、スペースで埋められ、それので、固定長であります。両者を比較すると、2つの選択肢があります。あなたは、TRIMまたはRPADを使用することができ、次のいずれか

select * from SJT_USER where TRIM(SJT_USER_NAME) in (select USER_NAME from NON_MEMBER); 

または

select * from SJT_USER where TRIM(SJT_USER_NAME) in (select RPAD(USER_NAME,255) from NON_MEMBER); 

あとでインデックスSJT_USER_NAMEを持っている場合は望ましいかもしれません。 IFのパフォーマンスは懸念されていませんが、私は通常、TRIMを比較の両側に置いて安全な側に置くことを好みます。

関連する問題