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 ...

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top