2015-12-23 29 views
0

如何查询mysql并选择与我的查询不符的行? 目前这是我的SQL如果我要选择符合该行:选择行在一个表中不匹配(mysql)

SELECT `user_id` 
FROM `my_table` 
WHERE `my_table`.`month` >= '201510' 
AND `my_table`.`month` <= '201601' 

在MySQL中,这将选择user_ids

我要的是选择user_ids,他们没有任何记录,一个 SQL将是:

SELECT `user_id` 
FROM `my_table` 
WHERE `my_table`.`month` !>= '201510' 
AND `my_table`.`month` !<= '201601' 

更清晰,蒙戈has a nice $not variable其执行逻辑运算,我想是这样$不能不在MySQL(或MariaDB的)

+0

'month not BETWEEN'201510'and'201601'' –

+0

如果我只有一个月该怎么办? – Mohammadhzp

+2

'!> ='是不允许的,但记住'不大于或等于'基本上'小于'所以请尝试'<'而不是'或者你的意思是'不等于'这将是'!=' – RiggsFolly

回答

4

只需使用NOT BETWEEN -

SELECT `user_id` 
FROM `my_table` 
WHERE `my_table`.`month` NOT BETWEEN '201510' AND '201601' 

在一个值的情况下 -

`my_table`.`month` <> '201510' 
+0

如果我只有一个月?在这种情况下,我不能使用BETWEEN – Mohammadhzp

+0

@Sougata:这是非常好的解决方案。 – devpro

0

试试这个:

SELECT user_id 
FROM my_table 
WHERE month NOT BETWEEN '201510' AND '201601' 
0

还有一个解决办法:

SELECT `user_id` 
FROM `my_table` 
WHERE `my_table`.`month` < '201510' 
AND `my_table`.`month` > '201601' 

这相当于(由@sougata回答):

SELECT `user_id` 
FROM `my_table` 
WHERE `my_table`.`month` NOT BETWEEN '201510' AND '201601' 
0

您需要检查NULL值的列明确

SELECT * 
FROM `my_table` 
WHERE `my_table`.`month` NOT BETWEEN '201510' AND '201601' 
    OR `my_table`.`month` IS NULL 

因为NULL值每比较将返回空值。并且NULL既不是真也不是假。

您的问题

一个笼统的回答

这不符合我的查询

封装查询和使用它的“NOT IN子句

SELECT `user_id` 
FROM `my_table` 
WHERE `user_id` NOT IN (
    SELECT `user_id` 
    FROM `my_table` 
    WHERE `my_table`.`month` >= '201510' 
    AND `my_table`.`month` <= '201601' 
) 

选择行但那通常是低效的。

令人惊讶的是扭转的条件的方式方法,那NULL将被转换为TRUE:

IF (condition, 0, 1) 

所以您的查询可能看起来像

SELECT `user_id` 
FROM `my_table` 
WHERE IF((`my_table`.`month` >= '201510' AND `my_table`.`month` <= '201601'), 0, 1) 

它还与

CASE WHEN condition THEN 0 ELSE 1 END 
相关问题