Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Propojení tabulek pomocí SQL

Dobrý den potřeboval bych pomoci s sql dotazem. Mám dvě tabulky, první je seznam kanceláří a druhým je seznam tiskaren.

kancelar:
ID, nazev, tisk1, tisk2

tiskarny
ID, tiskarna

V tabulce "kacelar" je vždy vyplněno ID zaznamu, nazev a tisk1 (z tabulky "tiskarna". Tisk2 je někdy prázdný a někdy vyplněný položkami z tabulky "tiskarna", Jde o to sestavit co nejjednodušší sql, který by mi vyjel něco ve tvaru:

ID, popis = tisk1 + popř. tisk2 (pokud existuje)

Nějak se mi to nedaří sestavit, teď to dělám tak, že prostře v programu projíždím věty a v příapdě že tisk2 není null, tak upravím položku popis. Výsledek pak teprve vkládám do výsledného formuláře. Čili defacto pár věcí jakoby navíc.

Předpokládám, že to nějak půjde poskládat v rámci jednoho sql, ale neumím si s tím rady. Proto bych si dovolil poporpsit o pomoc.

Děkuji.

Předmět Autor Datum
Přiznám se, jsem to nepochopil. Čím jsou ty dvě tabulky propojené? Přes ID, nebo to je jen primární…
touchwood 02.12.2016 16:15
touchwood
Omluva za nedostatečné informace. Jedná se MySQL 5.6, a je to tak jak říkáš, tabulka tiskarny je obo…
wolfencze 02.12.2016 16:42
wolfencze
Môžeš použiť join, alebo subselect (ktorý vyberie názov tlačiarne) do obyčajného selectu
čitateľ 02.12.2016 17:27
čitateľ
Za prve, tvoj navrh DB je zly. Ak budes chciet zapisat viac ako 2 tlaciarne do kanclu, tak si nahrat… poslední
wam_Spider007 02.12.2016 17:53
wam_Spider007

Přiznám se, jsem to nepochopil. Čím jsou ty dvě tabulky propojené? Přes ID, nebo to je jen primární klíč v obou? Kde je položka "popis" na kterou se odkazuješ, ale která nikde není zahrnuta?

Nebo je to tak že tabulka "tiskárny" slouží jako obor hodnot pro položky tisk1 a tisk2?

Co je to za SQL? MS Access?

Omluva za nedostatečné informace. Jedná se MySQL 5.6, a je to tak jak říkáš, tabulka tiskarny je oborem hodnout pro položky tisk1 a tisk2 přes ID. Položka popis by měla vzniknout jako výsledek součtu názvů těch tiskáren v tom dotazu. Takže výsledek by měl vypadat třeba takhle:

ID, KANCELAR, POPIS
===================

1 šef DELL5110
2 sekretarka HP1160, DELL1710

Za prve, tvoj navrh DB je zly. Ak budes chciet zapisat viac ako 2 tlaciarne do kanclu, tak si nahraty.
Po spravnosti mas mat tretiu tabulku, kde mas vazby.

Riesenie pre stav aky mas teraz je nejak takto.

Select K.ID, K.Nazov, concat(T1.tiskarna, ',', T2.tiskarna) as tiskarny
From Kancelar K
Left join Tiskarny T1
On T1.ID = K.tisk1
Left join Tiskarny T2
On T2.ID = K.tisk2

Pisane z mobilu pocas jazdy v elektricke, tak pripadne preklepy ospravedlnte.

Zpět do poradny Odpovědět na původní otázku Nahoru