2012-02-22 9 views
22

per favore mi aiuti a scrivere una query SQL con le condizioni 'non come in'SQL query con non come in

Select * from Table1 where EmpPU NOT Like IN ('%CSE%', '%ECE%', '%EEE%') 

errore Getting.

+1

possibile duplicato [E 'possibile utilizzare LIKE e IN per una dichiarazione WHERE?] (http://stackoverflow.com/questions/4335359/is-it-possibile-per-utilizzare-come-e-in-per-a-del-stampamento) – onedaywhen

risposta

53

non è possibile combinare come e in Nel prospetto che segue farebbe il lavoro però:.

Select * from Table1 
where EmpPU NOT Like '%CSE%' 
AND EmpPU NOT Like '%ECE%' 
AND EmpPU NOT Like '%EEE%' 
0

si può provare questo

Select * from Table1 where 
    EmpPU NOT Like '%CSE%' 
AND EmpPU NOT Like '%ECE%' 
AND EmpPU NOT Like '%EEE%' 
+0

Voglio in un colpo solo tutti i parametri invece di scrivere più 'NOT LIKE' parole – venkat

+0

Con la tua richiesta ottieni 'ERRORE' come' Msg 156, livello 15, stato 1, riga 3 Sintassi errata vicino alla parola chiave 'Mi piace'' – venkat

13

Ecco perché si sta mescolando due sintassi insieme.

Se si dispone sempre esattamente di questi tre valori, è possibile solo AND i risultati di tre espressioni LIKE.

Se è necessario farlo per "qualsiasi numero" di valori, è possibile inserire i valori in una tabella e fare un join.

WITH 
    myData 
AS 
(
      SELECT '%CSE%' AS match 
    UNION ALL SELECT '%ECE%' AS match 
    UNION ALL SELECT '%EEE%' AS match 
) 

SELECT 
    * 
FROM 
    Table1 
LEFT JOIN 
    myData 
    ON Table1.EmpPU LIKE myData.match 
WHERE 
    myData.match IS NULL 

O ...

WITH 
    myData 
AS 
(
      SELECT '%CSE%' AS match 
    UNION ALL SELECT '%ECE%' AS match 
    UNION ALL SELECT '%EEE%' AS match 
) 

SELECT 
    * 
FROM 
    Table1 
WHERE 
    NOT EXISTS (SELECT * FROM myData WHERE Table1.EmpPU LIKE match) 
1

Oppure si può fare in questo modo:

SELECT 
    * 
FROM 
    Table1 
WHERE NOT EXISTS 
    (
     SELECT 
      NULL 
     FROM 
     (
      SELECT '%CSE%' AS column1 UNION ALL 
      SELECT '%ECE%' UNION ALL 
      SELECT '%EEE%' 
     ) AS tbl 
     WHERE Table1.EmpPU LIKE tbl.column1 
    ) 
3

non puoi combinare LIKE e IN

si può fare:

select * from Table1 
where EmpPU not in ('%CSE%', '%ECE%', '%EEE%') 

ma voi non beneficiare della wildcard%

se è necessario l'% l'unica opzione è:

Select * from Table1 
where EmpPU not like '%CSE%' and EmpPU not like '%ECE%' and EmpPU not like '%EEE%' 
+0

Tranne che intendi 'AND' piuttosto che' OR'? E hai bisogno di specificare il nome del campo anche lì? * [L'ultima parte di questa risposta è carattere per carattere identico a una risposta cancellata ...] * – MatBailie

+0

no, è OR. Solo una delle condizioni deve essere vera per escludere il record. Una riga con "EEE" deve essere esclusa, ma non è come CSE – Diego

+1

Questo è esattamente il punto. Una riga è *** inclusa *** se la clausola WHERE è true, prendiamo ''SMEEEG'' come esempio e prova il tuo codice ...'('SMEEEG' NON MI PIACE '% CSE%') O ('SMEEEG' NON MI PIACE '% ECE%') O ('SMEEEG' NON MI PIACE '% EEE%')' => '(VERO) O (VERO) OR (FALSE) '=>' TRUE'. Il tuo codice include ''SMEEEG'' anche se *** è *** come''% EEE% ''. È necessario 'NOT ((x LIKE a) OR (x LIKE b) OR (x LIKE c))' o è necessario '(x NON MI PIACE a) E (x NON MI PIACE b) E (x NON MI PIACE c)'. Ad ogni modo, quello che hai non funziona. Scusate. – MatBailie

6

Se è stata impostata di parole che si desidera includere/escludere nella ricerca da una particolare colonna . Potresti voler usare la funzione di espressione regolare di mysql.

Esclusione delle serie di parole da una colonna:

SELECT 
    * 
FROM 
    Table1 
WHERE 
     EmpPU NOT REGEXP 'CSE|ECE|EEE'; 

Ricerca insieme di parole da una colonna:

SELECT 
    * 
FROM 
    Table1 
WHERE 
     EmpPU REGEXP 'CSE|ECE|EEE'; 
+0

Questa è una risposta migliore poiché è più simile a "NON MI PIACE A (...)", rendendo più facile mantenere la query. Per quanto riguarda le prestazioni, la regex potrebbe essere più difficile. – Jabberwockey

+0

L'OP chiede informazioni su T-SQL. –

+0

Questo è davvero un ottimo tizio della soluzione. – aavrug