3

SQL コマンドの短い形式が必要です (私は Oracle SQL を使用しています)。

SELECT * from table1 
WHERE field1 not like '%test%' 
AND field2 not like '%test%' 
AND field3 not like '%test%'

そのコマンドと同等の構文はありますか? みたいなことを考えていた

SELECT * from table1 
WHERE '%test%' not in (field1, field2, field3)

残念ながら、この構文は機能しませんか?! すべてのヒントと提案に感謝します。

4

3 に答える 3

4

いいえ、それは本当に不可能です。

De Morgan の法則の1 つを使用したこの変換は、わずかに短くなっていますが、数文字の違いしかありません。

SELECT *
FROM table1 
WHERE NOT (field1 LIKE '%test%' OR
           field2 LIKE '%test%' OR 
           field3 LIKE '%test%')

さらに短いこのハックもありますが、文字列リテラル'%test%'をアンダースコアを含む可能性のあるものに変更すると、クエリのパフォーマンスが低下するだけでなく、バ​​グの可能性が生じるため、お勧めしません。 、例'%te_st%':

SELECT *
FROM table1 
WHERE (field1 + '_' + field2 + '_' + field3) NOT LIKE '%test%'

あなたがすでに行っていることが最善の解決策だと思います。

于 2012-05-07T14:00:19.843 に答える