2016-11-07 4 views
1

時にはLIKEにANYが必要な時があり、それ以外の時にALLが必要なことがわかりません。それが私を狂ってしまいます。私は両方の条件でANYを使うことができるように感じます(カッコ内の任意の正規表現の後にレコードを選択しようとしています)。sql:好きなものと同じようなもの

何らかの理由で、ANYの最初のLIKEが正常に機能します。これは、dog chow、pedigree、またはbenefulを持つすべてのレコードを返します。

ただし、2番目のLIKEはALLを必要とします。さもなければ、それは御馳走、消耗品または濡れている記録を残さないでしょう。しかし、なぜ?私はANYがここに適切な形であるように感じる。

where dsc_item like any ('%DOG CHOW%','%PEDIGREE%','%BENEFUL%') 
and dsc_comm not like all ('%TREATS%','%SUPPLIES%', '%WET%') 

答えて

3

LIKE ANYOR ED条件に変換しますが、ANDLIKE ALL

where 
( dsc_item like '%DOG CHOW%' 
    OR dsc_item like '%PEDIGREE%','%BENEFUL%' 
) 
and 
( dsc_comm not like '%TREATS%' 
    AND dsc_comm not like '%SUPPLIES%' 
    AND dsc_comm not like '%WET%' 
) 

あなたはORANDを交換する場合は、すべての非NULL行について真であるcol <> 1 OR col <> 2ようなものです。

0
like any  similar to  = any 
like all  similar to  = all 
not like any similar to  <> any 
not like all similar to  <> all 

select  'My name is Inigo Montoya, you killed mhy father, prepare to die!' as str 

      ,case when str like any ('%Inigo%','%Donald%' ,'%Hillary%')  then 1 else 0 end -- 1 
      ,case when str like any ('%Adam%' ,'%Donald%' ,'%Hillary%')  then 1 else 0 end -- 0 
      ,case when str like all ('%Inigo%','%Montoya%','%father%')  then 1 else 0 end -- 1 
      ,case when str like all ('%Inigo%','%Montoya%','%mother%')  then 1 else 0 end -- 0 

      ,case when str not like any ('%Inigo%','%Montoya%','%mother%') then 1 else 0 end -- 1 
      ,case when str not like any ('%Inigo%','%Montoya%','%father%') then 1 else 0 end -- 0 
      ,case when str not like all ('%Adam%' ,'%Donald%' ,'%Hillary%') then 1 else 0 end -- 1 
      ,case when str not like all ('%Inigo%','%Donald%' ,'%Hillary%') then 1 else 0 end -- 0 
; 
関連する問題