2016-11-07 2 views
1

Ich kann nicht herausfinden, warum manchmal wie verlangt und andere Zeiten erfordert es alle, und es macht mich verrückt. Ich habe das Gefühl, ich könnte ANY in beiden Bedingungen verwenden (Ich versuche Datensätze auszuwählen, die einem der Regex-Ausdrücke in Klammern folgen).sql: wie alle vs wie alle

Aus irgendeinem Grund funktioniert das erste LIKE, mit ANY, ganz gut - es gibt alle Datensätze mit Hund Chow, Stammbaum oder Beneful.

Das zweite LIKE erfordert jedoch ALL. Sonst wird es keine Platten mit Leckerbissen, Vorräten oder Nässe weglassen. Aber warum? Ich fühle mich wie JEDE ist die geeignete Form hier.

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

Antwort

3

LIKE ANY übersetzt OR ed Zustand, aber LIKE ALL zu AND:

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%' 
) 

Wenn Sie die AND mit OR es ist wie col <> 1 OR col <> 2 ersetzen, die für jede nicht-NULL Zeile wahr ist.

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 
;