Hent data fra relaterede tabeller i Python
Lad os lave en forespørgsel, der henter
alle brugere sammen med deres byer. Til dette
kræves kommandoen LEFT
JOIN:
Dens syntaks ser sådan ud:
SELECT felter FROM tabel_navn
LEFT JOIN relateret_tabel_navn ON betingelse_for_relation
WHERE betingelse_for_udvælgelse
Lad os gennemgå de enkelte dele af syntaksen for denne kommando.
Felter
Da der vælges data fra flere tabeller,
vil udvælgelse af alle felter via * ikke
virke. Følgende forespørgsel vil kun vælge
felter fra hovedtabellen, men ikke fra den
relaterede tabel:
SELECT *
For at data skal hentes fra alle
tabeller, skal tabelnavnet angives før *
for udvælgelsen:
SELECT users.*, cities.*
Alternativt kan de ønskede felter listes op med angivelse af tabelnavn før dem:
SELECT users.name, cities.name
Disse to metoder har et problem. Det er, at hvis felter i tabellerne har identiske navne, vil der i Python-arrayet opstå en navnekonflikt, og kun ét felt vil "vinde", og det andet vil ikke være til stede.
For at løse problemet skal de konfliktfyldte
navne omdøbes via kommandoen
as:
SELECT users.name, cities.name as city_name
Relation
Efter kommandoen ON skal vi angive
felter fra de to tabeller, som relationen
skaber mellem. I vores tilfælde vil det være feltet id
fra by-tabellen og feltet city_id
fra bruger-tabellen:
ON cities.id=users.city_id
Forespørgsel
I sidste ende vil forespørgslen, der henter brugerne sammen med deres byer, se sådan ud:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiske opgaver
Antag, at du har en tabel med varer og en tabel med deres kategorier. Skriv en forespørgsel, som henter varenavnene sammen med deres kategorier.