mySQL'名称NOT IN'不工作?

时间:2017-06-06 10:46:41

标签: mysql sql

我有这样的声明:

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 个答案:

答案 0 :(得分: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;