我沒有得到這個INNER JOIN
這LEFT OUTER JOIN
之間的區別。 INNER JOIN
是我給出的解決方案。我想出了這個想法與LEFT OUTER JOIN
。兩者都可以工作,但最好的解決方案是什麼?加入
爲什麼我做了INNER JOIN這裏?
SELECT *
FROM world.city
INNER JOIN country ON (world.country.code=world=world.city.countryCode)
WHERE continent = "North America"
自己的解決方案是這樣的:
SELECT City.Name, City.Population, City.CountryCode
FROM City
LEFT OUTER JOIN Country ON City.CountryCode = Country.Code
WHERE Country.Continent = "North America"
爲什麼這是一個壞的解決方案?
爲什麼SQL知道大陸屬於表country
,而不是表「城市」?(如Country.Continent
)
兩個選擇都會返回相同的結果,因爲外部連接在邏輯上等同於內部連接:*給我所有已知大陸爲「北美」*的城市。這是一個糟糕的解決方案,如果優化是沒有足夠的智慧認識到,其實第一次加入所有的行,然後過濾結果(我不知道如果MySQL仍然是愚蠢的)。將「AND continent =」North America「」移到「ON」時,它將返回所有城市,但對於其他所有大洲則爲「NULL」。 – dnoeth