sql >> データベース >  >> RDS >> Sqlserver

<> 対 NOT IN

    SELECT something
    FROM someTable
    WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)
    

    リスト内の任意の値に対してチェックします。

    ただし、NOT IN は NULL 許容ではありません。サブクエリが NULL を含む一連の値を返した場合、レコードはまったく返されません。 (これは、内部的に NOT IN が idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL に最適化されているためです。 NULL と比較すると UNKNOWN が返され、式全体が TRUE にならないため、常に失敗します。)

    より優れた NULL トレラントなバリアントは次のようになります:

    SELECT something
    FROM someTable
    WHERE NOT EXISTS (SELECT ids FROM tmpIdTable WHERE ids = someTable.idcode)
    

    編集:私は当初、これを想定していました:

    SELECT something
    FROM someTable
    WHERE idcode <> (SELECT ids FROM tmpIdTable)
    

    最初の値のみに対してチェックします。この仮定は、少なくとも SQL Server では間違っていることがわかりました。実際に彼のエラーが発生します:

    Msg 512, Level 16, State 1, Line 1
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
    


    1. MySQL結合クエリの書き方

    2. SQL Server(T-SQL)の文字列の途中に文字を挿入する

    3. PHPはPythonを介してmysqlに接続できません

    4. ハイブhadoopからsqoopまでのデータをmysqlに保存しますか?