65 votes

Requête SQL avec NOT LIKE IN

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

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

Obtenir une erreur.

120voto

Paddy Points 16834

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

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

24voto

MatBailie Points 37610

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

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 devez le faire pour "n'importe quel nombre" de valeurs, vous pouvez mettre les valeurs dans une table et effectuer 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)

17voto

shashankqv Points 437

Si vous avez un ensemble de mots que vous souhaitez inclure/exclure dans la recherche d'une colonne particulière. Vous pouvez 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';

Rechercher un ensemble de mots dans une colonne :

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

6voto

Diego Points 13953

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 % wildcard

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

3voto

Arion Points 17617

Ou tu peux 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
    )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X