2014-01-23 85 views
0

我有麻烦了以下人类语言转化为MySQL查询:选择记录,其中除A或B

Select all rows except those with ColA equals '1' OR ColB equals '1'. 

我想:

SELECT * FROM table WHERE ColA = '1' OR ColB = '1'; 

以上将拉动记录是where子句匹配以上(ColA ='1'或ColB ='1'),但我如何得到相反的结果呢?我希望我正确地描述它。请让我知道它是否令人困惑。

回答

0
select 
    * 
from 
    `myTable` 
where 
    `colA` <> 1 and 
    `ColB` <> 1 

这将适用于哟你只有在colAcolBNOT NULL。如果有colA = NULLcolB = NULL的行,则必须更改请求中的条件。

select 
    * 
from 
    `myTable` 
where 
    (`colA` <> 1 or `colA` is null) and 
    (`colB` <> 1 or `colB` is null) 

当然这取决于如果你想与NULL值的行,但很多人忘记了这一点。

这里是SQL小提琴的例子http://www.sqlfiddle.com/#!2/ea797/2

+0

谢谢!这工作!这是空值将我抛弃。我混合了null和empty的值。其他人给予的解决方案的工作,但他们忘记了空值/空值。 –

1
SELECT * FROM table 
WHERE ColA <> '1' 
AND ColB <> '1' 

SELECT * FROM table 
WHERE NOT (ColA = '1' OR ColB = '1') 
+0

你打我吧。 –

0
SELECT * FROM table WHERE ColA <> '1' && ColB <> '1'; 
0
SELECT * FROM table WHERE ColA <> 1 AND ColB <> 1; 

,或者如果你想放大列表(1,2,3),而不是只有(1),请尝试:

SELECT * FROM table WHERE ColA NOT IN (1,2,3) AND ColB NOT IN (1,2,3); 
相关问题