2015-12-23 32 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 
相關問題