2017-06-06 47 views
1

我有這樣的說法:mySQL'where name NOT IN'not working?

SELECT id, name 
FROM players 
WHERE this = 1 
    AND name NOT IN (SELECT name 
        FROM players_online 
        WHERE this = 'that') 
ORDER BY RAND() 
LIMIT 3, 6 

所有列都正確命名。沒有發生SQL錯誤,它只是返回沒有結果。

從我讀過的文檔中,它應該可以工作,但不是。

有什麼想法?

+1

哪個RDBMS是這個呢?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

+1

你可能在'players_online.name'中有'null'的值 –

回答

1

請勿在子查詢中使用NOT IN。如果子查詢中的任何值爲NULL,則它具有錯誤的語義。在這種情況下,NOT IN從不計算爲TRUE,因此根本沒有行被返回。

相反,使用NOT EXISTS

SELECT p.id, p.name 
FROM players p 
WHERE p.this = 1 AND 
     NOT EXISTS (SELECT 1 
        FROM players_online po 
        WHERE po.name = p.name AND po.this = 'that' 
       ) 
ORDER BY RAND() 
LIMIT 3, 6;