我需要在三列上查询具有过滤条件的表:
select *
from table a
where a.order = car
and a.color !=red
or a.automatic !=auto
这只是检查第一个条件并忽略第二个条件。
我无法理解它:(
答案 0 :(得分:6)
从你的问题中不清楚,但你可能需要的只是围绕你的OR条件包裹parens
鉴于以下表和行
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') /
此选择语句将返回记录2,3和4,因为它们都是汽车,并且是蓝色或手动
SELECT *
FROM table_a a
WHERE a.a_order = 'car'
AND ( a.color != 'red'
OR a.automatic != 'auto' )
另一个选择是使用De Morgan's law执行以下操作“否定的否定是否定的结合。”
SELECT *
FROM table_a a
WHERE a.a_order = 'car'
AND NOT ( a.color = 'red'
AND a.automatic = 'auto' )
答案 1 :(得分:2)
AND的优先级高于OR逻辑运算符。您可以在括号内使用OR条件。
SELECT *
FROM table_a a
WHERE a.a_order = 'car'
AND NOT ( a.color = 'red'
AND a.automatic = 'auto' )