如何使用IN条件和NOT IN同一查询?

时间:2015-03-24 17:43:44

标签: sql oracle

使用Oracle我需要从IN条件查询它并为动态查询创建排除NOT IN条件。

示例:

Select *  
from tbl_namw 
where number in (1,2,3,4,5,6) 
and number not in select number from tbl_number where number in (2,3)

在上面的查询中不排除值。

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:0)

您正在寻找类似的东西:

SELECT * FROM Users WHERE CITY IN ('Paris','London','Lille','Mumbai')
 AND CITY NOT IN ('Lille','London');

而不是您的查询翻译为:

  SELECT * FROM Users WHERE City IN ('Paris','London','Lille') AND CITY
NOT IN (SELECT CITY FROM Users WHERE CITY IN ('Lille','London'));

它们都提供您需要的相同输出,第一个更简洁。

答案 1 :(得分:0)

您可以执行帖子中列出的内容,但语法错误。子查询周围需要括号:

SELECT * FROM tbl_namw
 WHERE number IN (1,2,3,4,5,6)
   AND number NOT IN ( SELECT number FROM tbl_number WHERE number IN (2,3) );
但是,我不确定我是否真的理解使用子查询的目的。为什么不执行以下操作,并了解IN子句中的数字是动态的,而NOT IN中的数字是您要排除的数字?

SELECT * FROM tbl_namw
 WHERE number IN (1,2,3,4,5,6) -- dynamic list
   AND number NOT IN (2,3);