Portál AbcLinuxu, 10. května 2025 13:44
Zdravim, mám následující problém:
SELECT * FROM users LEFT JOIN produkt
ON (users.model_id = produkt.id)
WHERE nejaka podminka
Potřebuju výpis dvou sjednocených tabulek bohužel tabulka users i produkt mají některé sloupce se stejným názvem a u těch mi to vypíše pouze hodnoty z tab. produkt. Dalo by se to nějak vyřešit aniž bych musel vypisovat všechny sloupce jednotlivě? Díky za každou radu...
SELECT users.*, produkt.* FROM ...
.
To jsem zkoušel ale nic...
Mmch, mě se vcelku osvědčilo generovat pro sloupce unikátní názvy, kde předpona je nějaká (systematická) zkratka názvu tabulky. Ono to ušetří dost psaní v joinech a je to všeobecně přehlednější.
Tohle přesně nesnáším1. Název sloupečku má být jedinečný v rámci tabulky (jinak to ani nejde), ale jinde se na něj můžeš odkazovat pomocí název_tabulky.název_sloupečku
. V případě, že máš stejně pojmenované sloupečky ve více tabulkách, mělo by tě to inspirovat k zamyšlení se nad datovým modelem: nejedná se třeba o doménu2? Nemáme v DB zbytečně redundantní data? Nešlo by některé atributy vyčlenit do zvláštní tabulky a pouze se na ně odkazovat? …
V případě propojení tabulek se dá na stejně pojmenovaných sloupečcích naopak ušetřit psaní – porovnej:
Druhý zápis je nejen kratší, ale i přehlednější na první pohled. Dávat názvům sloupečků takové předpony mi přijde jako kdybych souborům na disku dávat jedinečné3 názvy (a nečerpal výhodu toho, že soubor existuje v kontextu nějaké složky, stejně jako sloupeček existuje v kontextu tabulky).
vyjmenujte sloupce, ktere opravdu potrebujete, bude to nejen jednoznacnejsi, ale i rychlejsi..
muzete navic pouzit alias, takze to pote nebude tak slozite vypsat.
tedy napr.:
SELECT u.model_id , u.name , u.age FROM users u LEFT JOIN produkt p ON (u.model_id = p.id) WHERE nejaka podminka
Oni tie stĺpce vo výsledku sú, ale pravdepodobne Ti to domrví API jazyka, z ktorého ten SELECT púšťaš. Napríkald PHP keď vráti riadok ako asociatívne pole, tak robí to, že novšie položky poľa s tým istým názvom prepíšu staršie, ale keď to pustíš z konzoly MySQL, tak tam sú stĺpce obidva.
Riešením je pomenovanie stĺpcov vo výsledku, takto:
SELECT *, users.nazov AS users_nazov, produkt.nazov AS
produkt_nazov
FROM users LEFT JOIN produkt
ON (users.model_id = produkt.id)
WHERE nejaka podminka
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.