SQL如何过滤掉具有冲突的where子句的特定行

时间:2017-03-30 21:50:37

标签: mysql sql presto

这应该是一个简单的问题,但出于某种原因,我无法让它发挥作用。我有一张如下表:

|Name|Attribute| 
----------------
|Foo |     1   |
|Foo |     2   |
|Foo |     3   |
|Bar |     1   |
|Bar |     2   |
|Bar |     3   |
|Yum |     1   |
|Yum |     2   |
|Yum |     3   |

我想过滤它,如下所示

|Name|Attribute| 
----------------
|Foo |     2   |
|Foo |     3   |
|Bar |     1   |
|Bar |     2   |
|Bar |     3   |

请注意,我已删除所有"百胜"并删除了一个" Foo"仅当Attribute = 1

问题是当我做这样的事情时

SELECT * 
FROM table
WHERE name in ('Foo', 'Bar')
AND (name != 'Foo' AND attribute != 1)

我得到了这个结果

|Name|Attribute| 
----------------
|Bar |     2   |
|Bar |     3   |

我会认为括号将事物组合在一起?

2 个答案:

答案 0 :(得分:1)

我认为就or而言:

where (name = 'Bar') or (name = 'Foo' and attribute <> 1)

答案 1 :(得分:0)

Select 
   * 
From 
   table
Where
   (Name <> 'Yum') and 
   not (Name = 'Foo' and attribute = 1)