請幫我寫符合條件的SQL查詢爲「不喜歡」SQL查詢與不喜歡
Select * from Table1 where EmpPU NOT Like IN ('%CSE%', '%ECE%', '%EEE%')
得到錯誤。
請幫我寫符合條件的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