web-dev-qa-db-fra.com

Requête SQL avec NOT LIKE IN

S'il vous plaît aidez-moi à écrire une requête SQL avec les conditions comme "PAS LIKE IN"

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

Obtenir une erreur.

33
venkat

Vous ne pouvez pas combiner comme dans et dans. La déclaration ci-dessous ferait l'affaire cependant:

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

C'est parce que vous mélangez deux syntaxes.

Si vous avez toujours exactement ces trois valeurs, vous pouvez simplement ET les résultats de trois expressions LIKE.

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

Si vous avez besoin de le faire pour "n'importe quel nombre" de valeurs, vous pouvez les mettre dans une table et faire une jointure.

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

OU...

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)
16
MatBailie

Si vous avez un ensemble de mots que vous souhaitez inclure/exclure dans la recherche d'une colonne particulière. Vous voudrez peut-être utiliser la fonction d'expression régulière de mysql.

exclure un ensemble de mots d'une colonne:

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

recherche ensemble de mots d'une colonne:

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

vous ne pouvez pas combiner LIKE et IN

tu peux faire:

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

mais vous ne bénéficierez pas du caractère générique%

si vous avez besoin du%, la seule option est:

Select * from Table1
where EmpPU not like '%CSE%' and  EmpPU not like '%ECE%' and EmpPU not like '%EEE%'
5
Diego

Ou vous pouvez le faire comme ceci:

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
    )
2
Arion

tu peux essayer ça

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

Le code est comme ci-dessous:

Select * from Table1 where 
        (EmpPU NOT Like '%CSE%'  
    OR EmpPU NOT Like '%ECE%' 
    OR EmpPU NOT Like '%EEE%')
0
Albatros