Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que INNER JOIN não é igual (!=) trava para sempre


Digamos que seu primeiro INNER JOIN retorna 75% das 1.000.000 linhas em table1 . A segunda consulta não retorna as 250.000 outras linhas como você pensa. Em vez disso, ele tenta criar um produto cartesiano e remover as 750.000 linhas correspondentes. Assim, está tentando retornar 6.000.000 × 1.000.000-750.000 linhas. Esse é um conjunto de resultados de 6 × 10 linhas.

Você provavelmente quer isso:
SELECT * FROM table1
LEFT JOIN table2 ON table2.number = table1.number
WHERE table2.number IS NULL

Isso retorna linhas em table1 não está presente em table2 .

Você também pode estar interessado em FULL OUTER JOIN :
SELECT * FROM table1
FULL OUTER JOIN table2 ON table2.number = table1.number
WHERE table1.number IS NULL AND table2.number IS NULL

Isso retorna linhas em ambas as tabelas que não têm correspondência na outra tabela.