Outra questão tutorial SQL: Field> 0?
Pergunta
Tudo bem, esta (3a; problema de amostra com a resposta fornecida) tem-me coçar a cabeça :
bbc (nome, região, área, população, PIB)
3a. Encontre o maior país em cada região:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population > 0)
Eu entendo o conceito de 'WHERE y.region = x.region
' quando eu pensar sobre isso em termos de motor db looping sobre as entradas da tabela e adequar cada x.region com o y.region atual (no SELECT aninhada) ... mas wtf significa 'AND population > 0
' fazer? Não é uma resposta certa sem ele, mas eu não vejo como não ...
Solução
Essa cláusula é não só porque há uma entrada na tabela de Europa (para o Vaticano), que tem NULL na coluna população. O seguinte também funciona e eu acredito que é mais compreensível:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population IS NOT NULL)
Na documentação do MySQL para TODOS subqueries , há um comentário útil (deles ênfase):
Em geral, tabelas contendo NULL valores e mesas vazias são "casos extremos". Ao escrever código subconsulta, sempre considerar se você tem tomado essas duas possibilidades em conta.
Outras dicas
Estou especulando-lo aqui.
E se a população é nulo para todos os registros de uma região específica?
EDIT:. Ele pode ser considerado uma espécie de rede de segurança para ignorar valores-ve na população (não é um cenário da vida real)