我有这样的声明:
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错误,它只返回没有结果。
从我在文档中看到的它应该有用,但没有。
有什么想法吗?
答案 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;