2014-02-15 87 views
0

IN中可以使用LIKE嗎?以下查詢產生一個錯誤。IN與LIKE SQL中的條件

Select * 
    from employees 
    where salary between 2500 and 10000 
    and job_id NOT in (like '%MAN%', like '%CLERK%'); 

什麼是正確的語法?我使用Oracle 11g

+1

這*在like * thingy是我想要這麼多次的功能。 Oracle沒有這樣的事情。 –

+0

@RenéNyffenegger:我不認爲任何數據庫都有類似的東西。 –

+0

@a_horse_with_no_name:Teradata支持** LIKE ALL | ANY('%MAN%','%CLERK%')**。 ALL - > ANDed LIKEs,ANY - > ORed LIKEs,甚至可以使用SELECT來獲取搜索字符串 – dnoeth

回答

4

你不能做到既「喜歡」和「IN」的時候,但你可以做到這一點

Select * 
     from employees 
    where salary between 2500 
     and 10000 
     and job_id NOT like '%MAN%' 
     and job_id NOT like '%CLERK%'; 
+0

這是我在提到的查詢出錯後所做的。謝謝 –

3

不幸的是,沒有「像」操作符。你可以把它分解爲一系列的LIKE條件像@Elfentech建議,或者你可以用REGEXP_LIKE功能效仿:

SELECT * 
FROM employees 
WHERE salary BETWEEN 2500 AND 10000 
AND NOT REGEXP_LIKE (job_id, '.*[MAN|CLERK].*') 

或者,您也可以在一堆UNION ALL查詢的連接從dual

SELECT * 
FROM employees 
JOIN (SELECT 'MAN' AS search FROM dual 
     UNION ALL 
     SELECT 'CLERK' FROM dual) jobs 
ON employee.jod_id LIKE CONCAT ('%', jobs.search, '%') 
WHERE salary BETWEEN 2500 AND 10000 
+0

感謝您的REGEXP_LIKE –