フィールドに$ xが含まれていないSQLクエリ


132

SQLクエリを検索して、field1に$ xが含まれていない行を検索します。これどうやってするの?


CONTAINS()関数(SQL)を使用して同じチェックを行うことはできますか?
ケイト

回答:


291

これはどんな分野ですか?IN演算子は単一のフィールドでは使用できませんが、サブクエリまたは定義済みリストで使用するためのものです。

-- subquery
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y);
-- predefined list
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6);

文字列を検索している場合は、LIKE演算子を探します(ただし、これは低速です)。

-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';

検索する文字列が指定された文字列で始まるように制限すると、インデックスを使用でき(そのフィールドにインデックスがある場合)、かなり高速になります。

-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';

1
XBとは あなたの手紙は非常に紛らわしいです。テーブルまたはフィールドの使用をお勧めします。
Whitecat、2015

3値ロジックに慣れていない場合はNOT INとNULLが明白な方法で組み合わされないためNOT IN、そのためにサブクエリを使用する場合は、どの値もNULLにはなりません。ここでは、使用するSELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); あなたもNULL値を除外するために必要がある場合は、あなたがこれを行う必要があると思います:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
ベーコンビット

17

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (SQLインジェクションを回避するために、事前に$ xを適切にエスケープしてください)

編集:NOT IN少し違うことをします-あなたの質問は完全に明確ではないので、どちらを使用するか選びます。 LIKE 'xxx%'インデックスを使用できます。 LIKE '%xxx'またはLIKE '%xxx%'できません。


適切にエスケープすると見なされるものは何ですか?通常の文字列ではエスケープする必要があるのはいくつかだけですが、LIKEには特別な特殊文字がいくつかあります。
Pieter Bos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.