Erweitern Sie auf meinen Kommentar, es sieht aus wie Sie Ihre Join-Bedingungen gemischt zusammen bekommen. So etwas wie dies funktionieren könnte:
SELECT continent.Name, COUNT(country.Name)
FROM continent
LEFT JOIN
(country INNER JOIN city
ON sw.country.Capital = sw.city.Name
AND sw.city.Country = sw.country.Name) sw
ON sw.country.Area = continent.Area
WHERE sw.city.Population > 3000000
GROUP BY continent.Name;
bearbeiten
, die nicht funktioniert - die sw
Tabellengruppe verwiesen wird, bevor er erklärt wird. Lassen Sie uns versuchen Sie es erneut:
SELECT continent.Name, COUNT(country.Name)
FROM continent
LEFT JOIN country
ON country.area = continent.area
INNER JOIN city
ON country.Capital = city.Name
AND city.Country = country.Name
WHERE city.Population > 3000000
GROUP BY continent.Name;
Ich bin nicht sicher, dass dies kommen Logik ist genau das, was Sie wollen, aber die Abfrage analysiert, ohne Frage.
bearbeiten 2
Und eine letzte Version. Dies ist (soweit ich das beurteilen kann) gehen, um die gleichen Ergebnisse wie die zweite Abfrage zurück - zumindest, erzeugen sie den gleichen Plan - aber genauer spiegelt Ihre erste Abfrage:
SELECT continent.Name, COUNT(sw.Country)
FROM continent
LEFT JOIN
(country INNER JOIN city
ON country.Capital = city.Name
AND city.Country = country.Name) sw
ON sw.Area = continent.Area
WHERE sw.Population > 3000000
GROUP BY continent.Name;
I don Ich sehe keine Join-Bedingung für das "INNER JOIN" - ich vermute, dass sich Postgres darüber beschweren. – jmelesky
Sie haben Recht. Richtig. –
'(Land INNER JOIN Stadt)' ergibt keinen Sinn. Was genau versuchst du da zu machen? –