没有LIKE IN的SQL查询

ven*_*kat 33 sql t-sql sql-server-2008

请帮我写一个条件为'NOT LIKE IN'的SQL查询

Select * from Table1 where EmpPU NOT Like IN ('%CSE%', '%ECE%', '%EEE%')
Run Code Online (Sandbox Code Playgroud)

得到错误.

Pad*_*ddy 88

你不能将喜欢和结合起来.下面的声明可以完成这项工作:

Select * from Table1 
where EmpPU NOT Like '%CSE%' 
AND EmpPU NOT Like '%ECE%' 
AND EmpPU NOT Like '%EEE%'
Run Code Online (Sandbox Code Playgroud)


Mat*_*lie 18

那是因为你将两种语法混合在一起.

如果您总是拥有这三个值,则可以只计算三个LIKE表达式的结果.

SELECT
  *
FROM
  Table1
WHERE
      EmpPU NOT LIKE '%CSE%'
  AND EmpPU NOT LIKE '%ECE%'
  AND EmpPU NOT LIKE '%EEE%'
Run Code Online (Sandbox Code Playgroud)

如果需要对"任意数量"的值执行此操作,可以将值放入表中并进行连接.

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
Run Code Online (Sandbox Code Playgroud)

要么...

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)
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您要在特定列的搜索中包含/排除单词集.您可能希望使用mysql的正则表达式函数.

排除列中的单词集:

SELECT
  *
FROM
  Table1
WHERE
      EmpPU NOT REGEXP 'CSE|ECE|EEE';
Run Code Online (Sandbox Code Playgroud)

从列中搜索单词集:

SELECT
  *
FROM
  Table1
WHERE
      EmpPU REGEXP 'CSE|ECE|EEE';
Run Code Online (Sandbox Code Playgroud)

  • OP正在询问有关T-SQL的问题。 (2认同)

Die*_*ego 5

你不能把LIKE和IN结合起来

你可以做:

select * from Table1
where EmpPU not in ('%CSE%', '%ECE%', '%EEE%')
Run Code Online (Sandbox Code Playgroud)

但你不会受益于%通配符

如果您需要%,唯一的选择是:

Select * from Table1
where EmpPU not like '%CSE%' and  EmpPU not like '%ECE%' and EmpPU not like '%EEE%'
Run Code Online (Sandbox Code Playgroud)

  • 这正是重点。如果 WHERE 子句的计算结果为 true,则包含行***,让我们以“SMEEEG”为例并尝试您的代码...“('SMEEEG' NOT LIKE '%CSE%') OR ('SMEEEG' 不喜欢 '%ECE%') 或 ('SMEEEG' 不喜欢 '%EEE%')` => `(TRUE) OR (TRUE) OR (FALSE)` => `TRUE`。您的代码包含“SMEEEG”,即使它***像“%EEE%”。您需要“NOT((x LIKE a) OR (x LIKE b) OR (x LIKE c))”或者您需要“(x NOT LIKE a) AND (x NOT LIKE b) AND (x NOT LIKE c)”。无论哪种方式,你所拥有的都不起作用。对不起。 (2认同)