Hämta data från relaterade tabeller i Python
Låt oss skapa en förfrågan som hämtar
alla användare tillsammans med deras städer. För detta
behövs kommandot LEFT
JOIN:
Dess syntax ser ut på följande sätt:
sqlSELECT fält FROM tabellnamn
LEFT JOIN relaterad_tabell ON villkor_för_relation
WHERE villkor_för_urval
Låt oss gå igenom delarna av syntaxen för detta kommando.
Fält
Eftersom urvalet görs från flera tabeller,
kommer urval av alla fält via * inte
att fungera. Följande förfrågan väljer
fält endast från huvudtabellen, men inte från
den relaterade tabellen:
sqlSELECT *
För att data ska hämtas från alla
tabeller, måste man före * ange tabellnamnet
för urvalet:
sqlSELECT users.*, cities.*
Alternativt kan man lista de fält vi behöver med angivelse av tabellnamnet före dem:
sqlSELECT users.name, cities.name
Dessa två sätt har ett problem. Saken är den att om fälten i tabellerna har samma namn, kommer en namngodskonflikt att uppstå i Python-arrayen och bara ett fält kommer att vinna, medan det andra inte kommer att finnas med.
För att lösa problemet måste man byta namn på de konfliktfyllda
namnen via kommandot
as:
sqlSELECT users.name, cities.name as city_name
Relation
Efter kommandot ON måste vi ange
fälten från de två tabellerna som relationen sker
mellan. I vårt fall blir det fältet id
från tabellen med städer och fältet city_id
från tabellen med användare:
sqlON cities.id=users.city_id
Förfrågan
Så småningom kommer förfrågan som hämtar användare tillsammans med deras städer att se ut så här:
sqlSELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiska uppgifter
Antag att du har en tabell med produkter och en tabell med deras kategorier. Skriv en förfrågan som hämtar produktnamnen tillsammans med deras kategorier.