Eine weitere SQL-Tutorial Frage: Field> 0?
Frage
In Ordnung, dieses (3a; Probe Problem mit Antwort zur Verfügung gestellt) hat ich kratzen meinen Kopf :
bbc (Name, Region, Fläche, Bevölkerung, bip)
3a. Finden Sie das größte Land in der jeweiligen Region:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population > 0)
Ich verstehe das Konzept der ‚WHERE y.region = x.region
‘, wenn ich darüber in Bezug auf dem DB-Engine denke die Tabelleneinträge Schleifen über und jede x.region mit den aktuellen y.region passenden (in der verschachtelten SELECT) ... aber wtf bedeutet ‚AND population > 0
‘ tun? Es ist keine richtige Antwort, ohne sie, aber ich sehe nicht, wie man es nicht ...
Lösung
Diese Klausel ist es nur, weil es ein Eintrag in der Europa-Tabelle ist (für den Vatikan), die in der Bevölkerung Spalte NULL hat. Die folgenden Arbeiten auch und ich glaube, ist verständlich:
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)
In der MySQL-Dokumentation für alle Unterabfragen gibt es einen hilfreichen Kommentar (Betonung ihrer):
In der Regel Tabellen mit NULL Werte und leere Tabellen sind "Grenzfälle." Wenn Unterabfrage Code zu schreiben, immer überlegen, ob man diese zwei Möglichkeiten in Betracht gezogen hat.
Andere Tipps
Ich spekulierte es hier.
Was passiert, wenn Bevölkerung ist null für alle Datensätze aus einer bestimmten Region?
EDIT:. Es kann Art von Sicherheitsnetz betrachtet wird -ve Werte in der Bevölkerung zu ignorieren (kein wirkliches Leben Szenario)