Dataverkryging uit verwante tabelle in Python
Kom ons maak 'n navraag wat
alle gebruikers saam met hul stede sal haal. Vir dit
sal die opdrag LEFT
JOIN nodig wees:
Die sintaksis daarvan lyk soos volg:
SELECT velde FROM tabelnaam
LEFT JOIN verwante_tabelnaam ON skakelvoorwaarde
WHERE keurvoorwaarde
Kom ons kyk na die afsonderlike dele van die sintaksis van hierdie opdrag.
Velde
Aangesien die keuring uit verskeie tabelle kom,
sal die keuring van alle velde deur * nie
werk nie. Die volgende navraag sal velde kies
slegs uit die hooftabel, maar nie uit die
verwante een nie:
SELECT *
Om te verseker dat data uit alle
tabelle gekies word, moet die tabelnaam
vir die keuring voor * gespesifiseer word:
SELECT users.*, cities.*
Of, jy kan die nodige velde lys met die tabelnaam voor hulle:
SELECT users.name, cities.name
Hierdie twee metodes het 'n probleem. Die ding is, as velde in tabelle identiese name het, sal daar in die Python lys 'n naamkonflik wees en sal slegs een veld wen, en die ander een sal nie daar wees nie.
Om die probleem op te los, moet die konflikterende
name hernoem word deur die opdrag
as:
SELECT users.name, cities.name as city_name
Skakel
Na die opdrag ON moet ons
velde uit die twee tabelle spesifiseer, waarlangs die
skakel plaasvind. In ons geval sal dit die veld id
uit die tabel met stede en die veld city_id
uit die tabel met gebruikers wees:
ON cities.id=users.city_id
Navraag
Uiteindelik sal die navraag wat die gebruikers saam met hul stede sal haal so lyk:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiese take
Kom ons sê jy het 'n tabel met produkte en 'n tabel met hul kategorieë. Skryf 'n navraag, wat die name van produkte saam met hul kategorieë sal haal.