2012-02-22 11 views
22

por favor me ayude a escribir una consulta SQL con las condiciones que 'no como en'de consultas SQL con no como en

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

error al obtener.

+1

posible duplicado de [¿Es posible usar, como e IN para ¿una declaración WHERE?] (http://stackoverflow.com/questions/4335359/is-it-possible-to-use-like-and-in-for-a-where-statment) – onedaywhen

Respuesta

53

No se pueden combinar como y por debajo de la declaración sería hacer el trabajo sin embargo:.

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

puede probar esta

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

Quiero de una vez todos los parámetros en lugar de escribir múltiples 'NOT LIKE' palabras – venkat

+0

Con su consulta obtiene 'ERROR' como' Msg 156, Nivel 15, Estado 1, Línea 3 Sintaxis incorrecta cerca de la palabra clave 'Me gusta'. – venkat

13

Eso es porque estás mezclando dos sintaxis juntos.

Si siempre tiene exactamente esos tres valores, puede simplemente Y los resultados de tres expresiones LIKE.

SELECT 
    * 
FROM 
    Table1 
WHERE 
     EmpPU NOT LIKE '%CSE%' 
    AND EmpPU NOT LIKE '%ECE%' 
    AND EmpPU NOT LIKE '%EEE%' 

Si tiene que hacerlo por "cualquier número" de los valores, puede poner los valores en una tabla y hacer un unirse.

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

O puede hacerlo de esta manera:

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

usted no puede combinar COMO EN y

que puede hacer:

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

, pero usted no se benefician del comodín%

si necesita el% la única opción es:

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

¿Salvo que quiere decir 'AND' en lugar de' OR'? ¿Y necesita especificar el nombre del campo allí también? * [La última parte de esta respuesta es un carácter para el personaje idéntico a una respuesta eliminada ...] * – MatBailie

+0

no, es OR. Solo una de las condiciones debe ser verdadera para excluir el registro. Debe excluirse una fila con "EEE" en ella, pero no es como CSE – Diego

+1

Ese es exactamente el punto. Una fila está *** incluida *** si la cláusula WHERE se evalúa como verdadera, para tomar '' SMEEEG'' como ejemplo y probar su código ...'('SMEEEG' NO ME GUSTA '% CSE%') O ('SMEEEG' NO ME GUSTA '% ECE%') O ('SMEEEG' NO ME GUSTA '% EEE%')' => '(TRUE) O (TRUE) O (FALSO) '=>' VERDADERO'. Su código incluye ''SMEEEG'' a pesar de que *** es *** como''% EEE% ''. Necesitas 'NOT ((x LIKE a) OR (x LIKE b) O (x LIKE c))' o necesitas '(x NO ME GUSTA a) AND (x NO ME GUSTA b) AND (x NO ME GUSTA c)'. De cualquier manera, lo que tienes no funciona. Lo siento. – MatBailie

6

Si ha establecido de las palabras que desea incluir/excluir en busca de una columna en particular . Es posible que desee utilizar la función de expresión regular de mysql.

Excluir conjunto de palabras de una columna:

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

Buscar conjunto de palabras de una columna:

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

Esta es una mejor respuesta ya que es más como 'NO ME GUSTA EN (...) ', lo que facilita el mantenimiento de la consulta. En cuanto a rendimiento, la expresión regular podría ser más difícil. – Jabberwockey

+0

El OP pregunta por T-SQL. –

+0

Este es realmente un buen compañero de solución. – aavrug

Cuestiones relacionadas