Python-da baglanyşykly tablisalardan maglumat almak
Ähli ulanyjylary şäherleri bilen birlikde alýan sorag ýerine ýetireli. Bunuň üçin
LEFT JOIN buýrugy gerek bolýar:
Onuň sintaksisi aşakdaky ýaly görünýär:
SELECT meýdanlar FROM tablisa_ady
LEFT JOIN baglanyşykly_tablisa_ady ON baglanyşyk_şerti
WHERE saýlama_şerti
Geliň bu buýrugyň sintaksisiniň aýratyn böleklerini düşünýäli.
Meýdanlar
Saýlama birnäçe tablisadan ýerine ýetirilýändigi üçin,
* arkaly ähli meýdanlary saýlamak işlemez.
Aşakdaky sorag esasy tablisanyň meýdanlaryny saýlar, ýöne baglanyşykly tablisanyňkylary saýlamaz:
SELECT *
Maglumatlaryň ähli tablisalardan saýlanmagy üçin,
*-dan öň saýlama tablisasynyň adyny görkezmek gerek:
SELECT users.*, cities.*
Ýa-da biz gerek bolan meýdanlary tablisanyň adyny olaryň öňünde görkezip, sanap bilýäris:
SELECT users.name, cities.name
Bu iki usulyň bir meselesi bar. Problem şonda, eger tablisalardaky meýdanlar birmeňzeş atlara eýe bolsa, Python massiwinde atlar çakyşmasy bolup, diňe bir meýdan ýeňer, ikinjisi bolmaz.
Bu meseläni çözmek üçin, çakyşýan atlar
as buýrugy arkaly täzeden atlandyrylmagy gerek:
SELECT users.name, cities.name as city_name
Baglanyşyk
ON buýrugyndan soň, baglanyşyk amala aşyrylýan iki tablisanyň meýdanlaryny görkezmeli.
Bizim ýagdaýymyzda bu, şäherler tablisasyndan id meýdany
we ulanyjylar tablisasyndan city_id meýdany bolar:
ON cities.id=users.city_id
Sorag
Netijede, ulanyjylary şäherleri bilen birlikde alyp gelýän sorag aşakdaky ýaly görüner:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Amaly meseleler
Sizde harytlar tablisasy we olaryň kategoriýalary tablisasy bar diýeli. Harytlaryň atlaryny kategoriýalary bilen birlikde alyp gelýän sorag ýazyň.