Mysql
 sql >> Database >  >> RDS >> Mysql

mySQL 'dove nome NON IN' non funziona?

Non utilizzare NOT IN con sottoquery. Ha la semantica errata se un valore nella sottoquery è NULL . In tal caso, il NOT IN non restituisce mai TRUE, quindi non vengono restituite righe.

Invece, usa 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;