1

我需要在三列上查询具有过滤条件的表:

select * 
from table a 
where a.order = car 
and a.color !=red 
or a.automatic !=auto

这只是检查第一个条件并忽略第二个条件。

我只是无法理解它:(

4

2 回答 2

6

从您的问题中不清楚,但您可能需要的只是将括号包裹在您的 OR 条件周围

鉴于下表和行

CREATE TABLE table_a 
    (
     id int primary key, 
     a_order varchar2(20), 
     color varchar2(40),
     automatic varchar2(10)
    )

/


INSERT INTO table_a VALUES (1,'car','red','auto')     /
INSERT INTO table_a VALUES (2,'car','red','manual')   /
INSERT INTO table_a VALUES (3,'car','blue','auto')    /
INSERT INTO table_a VALUES (4,'car','blue','manual') /
INSERT INTO table_a VALUES (5,'truck','red','auto')   /
INSERT INTO table_a VALUES (6,'truck','red','manual') /
INSERT INTO table_a VALUES (7,'truck','blue','auto') /
INSERT INTO table_a VALUES (8,'truck','blue','manual') /

此 select 语句将返回记录 2、3 和 4,因为它们都是汽车并且是蓝色或手动的

SELECT * 
FROM   table_a a 
WHERE  a.a_order = 'car' 
       AND ( a.color != 'red' 
              OR a.automatic != 'auto' ) 

演示

另一种选择是使用德摩根定律“析取的否定是否定的合取”来执行以下操作。

SELECT * 
FROM   table_a a 
WHERE  a.a_order = 'car' 
    AND NOT ( a.color = 'red' 
             AND a.automatic = 'auto' ) 

演示

于 2012-05-01T00:37:20.897 回答
2

AND 的优先级高于 OR 逻辑运算符。您可以在括号内使用 OR 条件。

SELECT * 
  FROM table_a a 
 WHERE a.a_order = 'car' 
   AND NOT ( a.color = 'red' 
        AND a.automatic = 'auto' )
于 2012-05-01T19:48:26.227 回答