Подтвердить что ты не робот

SQL-запрос с NOT LIKE IN

Пожалуйста, помогите мне написать sql-запрос с условиями как "НЕ НРАВИТСЯ"

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

Получение ошибки.

4b9b3361

Ответ 1

Вы не можете объединиться как и в. Указание ниже выполнило бы работу:

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

Ответ 2

Это потому, что вы смешиваете два синтаксиса вместе.

Если у вас всегда есть эти три значения, вы можете просто И результаты трех выражений LIKE.

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

Если вам нужно сделать это для "любого числа" значений, вы можете поместить значения в таблицу и выполнить объединение.

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

OR...

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)

Ответ 3

Если у вас есть набор слов, которые вы хотите включить/исключить в поиске из определенного столбца. Вы можете использовать функцию регулярного выражения mysql.

Исключить набор слов из столбца:

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

Поиск набора слов из столбца:

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

Ответ 4

вы не можете комбинировать LIKE и IN

вы можете сделать:

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

но вы не выиграете от шаблона%

если вам нужен только%:

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

Ответ 5

Или вы можете сделать это следующим образом:

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
    )

Ответ 6

вы можете попробовать это

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