Otra pregunta del tutorial de SQL: ¿Campo> 0?

votos
2

Muy bien, este (3a, problema de muestra con la respuesta proporcionada) me ha hecho rascar la cabeza:

bbc (nombre, región, área, población, pib)
3a. Encuentra el país más grande en 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 de que el motor de DB repite las entradas de la tabla y haga coincidir cada región x.con la actual y.region (en el SELECT anidado) ... pero lo hace ' AND population > 0' ' ' ? No es una respuesta correcta sin eso, pero no veo cómo no ...

Publicado el 12/01/2009 a las 04:40
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

Esa cláusula está ahí simplemente 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 la documentación de MySQL para TODAS las subconsultas , hay un comentario útil (énfasis en ellas):

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.

Respondida el 12/01/2009 a las 04:50
fuente por usuario

votos
2

Estoy especulando aquí.

¿Qué pasa 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 en la población (no en un escenario de la vida real).

Respondida el 12/01/2009 a las 04:48
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more