Otra pregunta tutorial de SQL: Field > 0?
Pregunta
Muy bien, este (3a; problema de muestra con la respuesta proporcionada) me tiene rascándome la cabeza :
bbc (nombre, región, área, población, pib)
3a. Encuentre el país más grande de cada región:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population > 0)
Entiendo el concepto de ' WHERE y.region = x.region
' cuando lo pienso en términos del motor de db que recorre las entradas de la tabla y hace coincidir cada x.region con la actual y.region (en el SELECCIONADO anidado) ... pero wtf hace '
Solución
Esa cláusula está ahí solo porque hay una entrada en la tabla de Europa (para el Vaticano) que tiene NULL en la columna de población. Lo siguiente también funciona y creo que es más comprensible:
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)
En el documentación de MySQL para TODAS las subconsultas , hay un comentario útil (énfasis suyo):
En general, las tablas que contienen valores NULL y tablas vacías son "casos extremos". Al escribir el código de subconsulta, siempre considere si ha tenido en cuenta esas dos posibilidades.
Otros consejos
Estoy especulando aquí.
¿Qué sucede si la población es nula para todos los registros de una región específica?
EDITAR: se puede considerar una especie de red de seguridad para ignorar los valores -ve en la población (no un escenario de la vida real).