Wpis z mikrobloga

Cześć, zacząłem podstawy SQL z SQLzoo i napotkałem mały problem. Nie rozumiem, dlaczego wynik w tym jest zwrócony dopiero po dodaniu linii: AND y.name != x.name. Dlaczego jest ona niezbędna? Czy ktoś mógłby mi to łopatologicznie wytłumaczyć? Zadanie wygląda w całości tak:
--#10
/*
Some countries have populations more than three times that of any of their neighbours (in the same continent). Give the countries and continents.
*/
SELECT name, continent
FROM world x
WHERE population > ALL(SELECT population*3 FROM world y WHERE x.continent = y.continent AND population > 0 AND y.name != x.name)

#sql #bazydanych
  • 5
@Rugger: żeby do porównania nie brać kraju który sprawdzamy, bo on nigdy nie będzie miał populacji większej niż jego populacja pomnożona * 3. Masz warunek population > ALL ... który da TRUE tylko, jeśli populacja kraju będzie większa od 3krotności WSZYSTKICH krajów z danego kontynentu, więc jeśli nie wykluczysz sprawdzanego kraju, to nigdy nie będzie prawdą, bo zawsze będziesz porównywać x > 3x
@bziuuumor: Dzięki bardzo za pomoc, już pierwsze zdanie mi wszystko rozjaśniło :) Mam jeszcze małe pytanie, co polecasz do nauki jeśli znam podstawy? Pracujesz w obszarze baz danych?
@Rugger: No to się cieszę :) Samego SQLa to uczyłem się z neta, tak jak Ty. Na początku to chyba od Andrzeja Klusiewicza (wcześniej jego stronka o oracle ludzkim głosem), teraz wrzucił to na nową_stronę. Potem głównie książki bardziej o projektowaniu baz, następnie samym Oraclu (bo w tej technologii pracuję odpowiadając na drugie pytanie). Jak ogarniesz SQLa, to fajna książka to np ta antywzorce
Dzięki za materiały! A w jakiej branży konkretnie? Miałeś do czynienia z Pythonem, R? Jaki stopień znajomości SQL uznałbyś za przyzwoity, tak aby łapać się na jakiś staż? :)