が、私は2つの項目の一致がない旨のwhere句を持つ単純なクエリを実行しようとしてい一致しますまた試みました:mysqlのクエリは
where l.country not like (\"%USA%\", \"%CA%\") ORDER BY l.state
複数の一致で「好き」を使用する方法はありますか?
が、私は2つの項目の一致がない旨のwhere句を持つ単純なクエリを実行しようとしてい一致しますまた試みました:mysqlのクエリは
where l.country not like (\"%USA%\", \"%CA%\") ORDER BY l.state
複数の一致で「好き」を使用する方法はありますか?
これはあなたの元の状態である:
where l.country not like "%USA%" or "%CA%" ORDER BY l.state
私はあなたが「国は米国でもカリフォルニアでもない」を意味するために、これを意図すると仮定
もしそうなら、あなたはそれをこのように記述します。
where l.country not like '%USA%' and l.country not like '%CA%' ORDER BY l.state
しかし、SQLには構文がNOT LIKE 'X' OR 'Y'
のためにありません。 LIKE
述部には左オペランドと右オペランドが1つあります。
あなたが書いた式は有効な式ですが、あなたが考えるとは思いません。それはあなたがこれを書いていたかのようにのようなものです:
あるwhere (l.country not like "%USA%") or ("%CA%") ORDER BY l.state
は、2つの用語は、OR
で区切られ、最初はLIKE
の比較であり、第二には、独自のリテラルだけで単一の文字列です。これは表現の中で有効な用語ですが、何も役に立たないものです。それは書き込みのようです:
x = 6 * 8 + 0
ゼロにはどのような効果がありますか?なし。
更新:間違っていましたが、私はあなたがそれを書いたときのクエリの効果を見落としました。ブール式では、2つの項がOR
の場合、2番目の項が常にTRUEの場合、最初の項が何であるかは関係ありません。
WHERE (some expression) OR (TRUE)
これは常に該当します。
リテラル文字列'%CA%'
は、空の文字列またはNULLではないため、trueとカウントされます。ですから元のクエリではWHERE句は国が何であっても常に真です。
答えと明確な説明をありがとう! – Sackling
あなたは交代でREGEXP
を使用することができます。
SELECT *
FROM yourTable
WHERE country NOT REGEXP '"%USA%"|"%CA%"'
注:
あなたは、単一引用符で囲んだ文字列リテラルの内側に表示される二重引用符をエスケープする必要はありません。元のクエリは実行されませんでした。なぜなら、LIKE
を使用している列と、別の列または文字列リテラル(通常は一重引用符)を比較する必要があるからです。
REGEXP
は大文字と小文字を区別しないので、これはあなたのケースで問題には表示されませんが、私たちは、同じ結果をusa
とca
を使用することもできました。
はい、正規表現ベースの低速なアプローチです。現在のもので何が問題なのですか – GurV
あなたの実際のロジックは何ですか? USA _and_ CA、またはUSA _or_ CAを持たないレコードと一致させますか? –