2016-09-09 9 views
1

varchar50AllowNulls列を1つの列と比較する2つのデータベースがあり、もう1つはTextNotNull列です。SQL VarcharフィールドとSQLを比較

私が見つけたのは、varchar列に値があり、テキスト列に空の文字列がある場合、これらのリンクテーブルへのアクセスクエリが機能することです。

ただし、varcharに空の文字列があり、テキスト列に値がある場合は機能しません。

これに対処しているようなトピックはありません。私は、開発者にvarcharにテキストを変更するよう依頼することができましたが、SQLを使用して解決できる場合は最善の策だと考えました。

私が推測するのは、キャストやトリミングが必要だということですが、私の努力は成功していません。

SELECT 
    A.EQNUM, A.[Varchar50AllowNulls], B.EQNUM, B.[TextNotAllowNulls] 
FROM 
    A 
INNER JOIN 
    B ON A.EQNUM = B.EQNUM 
WHERE 
    ((A.[Varchar50AllowNulls] <> B.[TextNotAllowNulls])); 
+1

「作品」とはどういう意味ですか?あなたは等価( '=')を比較していません、あなたは不一致( '<>')を比較しているので、2つのフィールドの値が異なるところだけが得られます。そして、nullは、それ自体を含め、何かに等しくない、あるいは不等ではないことに注意してください。 nullは有害で、nullを含む(ほとんどの)演算の結果は結果としてnullを生成します。 –

答えて

2

下記のおWHERE句のためのロジックを使用すると、NULL可能VARCHAR列が非NULL可能TEXT列に等しいないときにレコードを削除することです。 Varchar50AllowNullsではなく、NULLの場合、元の状態は<>を使用しています。しかし、Varchar50AllowNullsNULLの場合、の値はNULLと比較すると分かりません。代わりにTextNotAllowNullsNULLにはなりません。Varchar50AllowNullsNULLの場合は、TEXT列の値にかかわらず、このレコードを削除します。

SELECT A.EQNUM, 
     A.[Varchar50AllowNulls], 
     B.EQNUM, 
     B.[TextNotAllowNulls] 
FROM A 
INNER JOIN B 
    ON A.EQNUM = B.EQNUM 
WHERE A.[Varchar50AllowNulls] <> B.[TextNotAllowNulls] OR 
     A.[Varchar50AllowNulls] IS NULL 
+0

解決済み...完璧で、私は今論理を理解しています。私は実際に非常に似たようなものを試しましたが、明らかにあなたの追加の単純さではありません。ティムレッスンありがとうございます。 –

+0

@DaleArp - これがうまくいく場合は、これに答えをマークしてください。回答がないと、質問のキューをクリアするのに役立ちます。その人があなたの質問に答えたという事実を認めます – dbmitch