SQL查询与不喜欢
请帮我写符合条件的SQL查询为“不喜欢”SQL查询与不喜欢
Select * from Table1 where EmpPU NOT Like IN ('%CSE%', '%ECE%', '%EEE%')
得到错误。
你不能像结合在下面的语句会虽然做的工作:
Select * from Table1
where EmpPU NOT Like '%CSE%'
AND EmpPU NOT Like '%ECE%'
AND EmpPU NOT Like '%EEE%'
那是因为你是混合两种语法在一起。
如果你总是有这三个值,那么你可以将三个LIKE表达式的结果进行AND。
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)
或者你也可以做这样的:
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
)
你不能结合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%'
除了您的意思是'AND'而不是'OR'吗?你还需要在那里指定字段名称? * [这个答案的最后部分是与删除的答案相同的字符的字符...] * – MatBailie 2012-02-22 11:24:23
不,它的OR。只有其中一个条件必须为真才能排除记录。必须排除其中含有“EEE”的行,但它不像CSE – Diego 2012-02-22 11:34:25
这就是要点。如果WHERE子句的计算结果为true,则包含***行***以SMEEEG作为示例并尝试您的代码...('SMEEEG'不是'%CSE%')或('SMEEEG'不是'%ECE%')或('SMEEEG'不是'%EEE%')'=>'(TRUE)或(TRUE) OR(FALSE)'=>'TRUE'。你的代码包含''SMEEEG',即使它***就像'%EEE%'。你需要'NOT((x LIKE a)OR(x LIKE b)OR(x LIKE c))'或者你需要'(x NOT LIKE a)和(x NOT LIKE b)AND(x NOT LIKE c)''。无论哪种方式,你有什么都行不通。抱歉。 – MatBailie 2012-02-22 11:39:45
如果您已设置要包括/从一个特定的列在搜索排除的字词。你可能想使用mysql的正则表达式函数。
排除组词从一列:从列
SELECT
*
FROM
Table1
WHERE
EmpPU NOT REGEXP 'CSE|ECE|EEE';
搜索词的集合:
SELECT
*
FROM
Table1
WHERE
EmpPU REGEXP 'CSE|ECE|EEE';
的[
这是一个更好的答案,因为它更符合'NOT LIKE IN(...)'的要求,这使得查询更容易。在性能方面,正则表达式可能更难。 – Jabberwockey 2015-11-16 11:46:55
OP在询问T-SQL。 – 2017-01-27 09:44:18
这是一个很好的解决方案。 – aavrug 2017-06-24 17:29:01
可能重复是否可以使用LIKE和IN的一个WHERE语句?](http://stackoverflow.com/questions/4335359/is-it-possible-to-use-like-and-in-for-a-where-statment) – onedaywhen 2012-02-22 11:28:02