Domanda

Bene, questo (3a; problema di esempio con la risposta fornita) mi ha fatto grattare la testa :

  

bbc (nome, regione, area, popolazione, gdp)
   3 bis. Trova il paese più grande in ogni regione:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population > 0)

Comprendo il concetto di ' DOVE y.region = x.region ' quando ci penso in termini di motore db che scorre ciclicamente sulle voci della tabella e abbina ogni x.region con l'attuale y.region (nel SELECT nidificato) ... ma wtf fa ' AND popolazione > 0 'fare? Non è una risposta giusta senza di essa, ma non vedo come no ...

È stato utile?

Soluzione

Quella clausola è lì solo perché c'è una voce nella tabella Europa (per il Vaticano) che ha NULL nella colonna della popolazione. Funzionano anche le seguenti e credo che sia più comprensibile:

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)

Nella Documentazione MySQL per TUTTE le subquery , c'è un commento utile (enfatizza il loro):

  

In generale, tabelle contenenti NULL valori e tabelle vuote sono " casi limite. " Quando scrivi un codice di subquery, considera sempre se hai preso in considerazione queste due possibilità.

Altri suggerimenti

Lo sto speculando qui.

Cosa succede se la popolazione è nulla per tutti i record di una regione specifica?

EDIT: può essere considerato una specie di rete di sicurezza ignorare -ve i valori nella popolazione (non uno scenario di vita reale).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top