1

3つの列にフィルタリング条件があるテーブルをクエリする必要があります。

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

これは最初の条件をチェックし、2番目の条件を無視します。

頭が回らない:(

4

2 に答える 2

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') /

このselectステートメントは、レコード2、3、および4を返します。これらはすべて車であり、青色または手動のいずれかであるためです。

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

デモ

もう1つのオプションは、ド・モルガンの法則「論理和の否定は否定の論理積です」を使用して次のことを行うことです。

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 に答える