san*_*ndy 1 sql oracle boolean-logic
我需要在三列上查询具有过滤条件的表:
select *
from table a
where a.order = car
and a.color !=red
or a.automatic !=auto
Run Code Online (Sandbox Code Playgroud)
这只是检查第一个条件而忽略第二个条件.
我只是无法理解它:(
从你的问题不清楚,但你可能需要的只是围绕你的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') /
Run Code Online (Sandbox Code Playgroud)
此选择语句将返回记录2,3和4,因为它们都是汽车,并且是蓝色或手动的
SELECT *
FROM table_a a
WHERE a.a_order = 'car'
AND ( a.color != 'red'
OR a.automatic != 'auto' )
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用De Morgan定律进行以下操作:"否定分离是否定的结合".
SELECT *
FROM table_a a
WHERE a.a_order = 'car'
AND NOT ( a.color = 'red'
AND a.automatic = 'auto' )
Run Code Online (Sandbox Code Playgroud)