Seotud tabelitest andmete hankimine Pythonis
Teeme päringu, mis toob kõik
kasutajad koos nende linnadega. Selleks
on vaja käsku LEFT
JOIN:
Selle süntaks on järgmine:
SELECT väljad FROM tabeli_nimi
LEFT JOIN seotud_tabeli_nimi ON seosingutingimus
WHERE valikutingimus
Vaatame üksikuid osi selle käsu süntaksist.
Väljad
Kuna valik tehakse mitmest tabelist,
siis kõigi väljade valimine läbi * ei
toimi. Järgmine päring valib väljad ainult
põhitabelist, mitte seotud tabelist:
SELECT *
Selleks, et andmeid valitakse kõigist
tabelitest, tuleb enne * määrata
tabeli nimi valimiseks:
SELECT users.*, cities.*
Või saab loetleda vajalikud väljad koos tabeli nime määramisega nende ees:
SELECT users.name, cities.name
Neil kahel viisil on probleem. Asi on selles, et kui väljad tabelites on identsete nimedega, siis Pythoni massiivis tekib nimetuste konflikt ja ainult üks väljadest jääb alles, teist ei ole.
Probleemi lahendamiseks tuleb konfliktseid
nimesid ümber nimetada läbi käsu
as:
SELECT users.name, cities.name as city_name
Seos
Pärast käsku ON peame määrama
kaks välja kahest tabelist, mille kaudu seos toimub.
Meie puhul on see väli id
linnade tabelist ja väli city_id
kasutajate tabelist:
ON cities.id=users.city_id
Päring
Lõppkokkuvõttes näeb päring, mis toob kasutajad koos nende linnadega välja järgmine:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktilised ülesanded
Oletame, et teil on tabel toodetega ja tabel nende kategooriatega. Kirjutage päring, mis toob toodete nimed koos nende kategooriatega.