Un'altra domanda del tutorial SQL: Field > 0?
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 ...
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).