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)
你不能把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)