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

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

33 голосов
/ 22 февраля 2012

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

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

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

Ответы [ 6 ]

82 голосов
/ 22 февраля 2012

Вы не можете объединять как и в. Заявление ниже будет делать эту работу, хотя:

Select * from Table1 
where EmpPU NOT Like '%CSE%' 
AND EmpPU NOT Like '%ECE%' 
AND EmpPU NOT Like '%EEE%'
16 голосов
/ 22 февраля 2012

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

Если у вас всегда есть именно эти три значения, вы можете просто И результаты трех выражений 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

ИЛИ ...

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)
8 голосов
/ 18 февраля 2015

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

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

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

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

SELECT
  *
FROM
  Table1
WHERE
      EmpPU REGEXP 'CSE|ECE|EEE';
5 голосов
/ 22 февраля 2012

вы не можете комбинировать 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%'
2 голосов
/ 22 февраля 2012

Или вы можете сделать это так:

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
    )
0 голосов
/ 22 февраля 2012

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

Select * from Table1 where 
    EmpPU NOT Like '%CSE%'  
AND EmpPU NOT Like '%ECE%' 
AND EmpPU NOT Like '%EEE%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...