Vánoční nadílka Vánoční nadílka
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací

Diskuze: Dotez Unio

Ostatní jazyky SQL SQL a databáze Dotez Unio

Aktivity (1)
Avatar
radek
Člen
Avatar
radek:11. října 10:29

Mám 2 tabulky STANICE a STANICEHIS, které jsou stejné, jen v STANICEHIS jsou historické údaje. Pro záznam z tabulek TSTANICE a TSTANICEHIS týkající se daného id. používám kód:

"SELECT CISLO, NAZEV, AREAL, ODDELENI FROM STANICE WHERE ID = @id UNION SELECT CISLO, NAZEV, AREAL, ODDELENI FROM STANICEHIS WHERE ID = @id ORDER BY 1 DESC"

Kód funguje dobře.

Potřebuju ale připojit další tabulku ODDELENI, kde je číslo oddělení, které je stejné jako oddeleni v tabulce STANICE a nazev ODDELENI, které tam potřebuji mít.

zkouším kód, ale nefunguje, prosím o opravu tohoto kódu. Díky
"SELECT S.CISLO, S.NAZEV S_NAZEV, S.AREAL, S.ODDELENI O.NAZEV O_NAZEV FROM STANICE S LEFT JOIN ODDELENI O ON O.KOD = S.ODDELENI WHERE S.ID = @id UNION SELECT S.CISLO, S.NAZEV S_NAZEV, S.AREAL, S.ODDELENI O.NAZEV O_NAZEV FROM STANICE S LEFT JOIN ODDELENI O ON O.KOD = S.ODDELENI WHERE S.ID = @id ORDER BY 1 DESC"

 
Odpovědět 11. října 10:29
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11. října 10:53

Pocet sloupcu musi byt pro union stejny u obou dotazu. Coz se zda, ze je.
U nazvu sloupcu pouzivam AS.
A chybeli tam carky.
Jinak se zda, ze by to mohlo byt ok.
Jo, zkus kdyztak formatovac kodu a sql dotazy si pis aspon takto formatovane do programu. Vetsinou si s tim umi poradit sql-driver. http://www.dpriver.com/…qlformat.htm

 SELECT
          s.cislo,
          s.nazev AS s_nazev, -- pridal jsem tam vsude AS
          s.areal,
          s.oddeleni, -- tady schazela carka
          o.nazev AS o_nazev
FROM
          stanice s
          LEFT JOIN oddeleni o ON o.kod = s.oddeleni
WHERE     s.id = @id

UNION

SELECT
          s.cislo,
          s.nazev AS s_nazev,
          s.areal,
          s.oddeleni, -- tady take schazela carka
          o.nazev AS o_nazev
FROM
          stanice s
          LEFT JOIN oddeleni o ON o.kod = s.oddeleni
WHERE     s.id = @id

ORDER BY  1 DESC -- nebylo by lepsi sem napsat jmeno sloupce?
Editováno 11. října 10:54
 
Nahoru Odpovědět  +1 11. října 10:53
Avatar
radek
Člen
Avatar
radek:11. října 11:26

Díky už to funguje

 
Nahoru Odpovědět 11. října 11:26
Avatar
plelovsky
Člen
Avatar
plelovsky:11. října 14:37

Můžu se zeptat - jaký má smysl spojovat UNIONem 2 identické dotazy? Oba jsou ze stejných tabulek. Chceš tam mít každý řádek 2 krát?

 
Nahoru Odpovědět 11. října 14:37
Avatar
radek
Člen
Avatar
radek:11. října 20:08

Nejsou ze stejných tabulek. 1 tabulka je STANICE, kde jsou aktuální data. 2 tabulka je STANICEHIS, kde jsou historická data, tzn. vidím zde změny i zrušení stanic, včetně datumu změn i kdo změny udělal. Když tabulky nespojím, vidím veškerá historická data. Když je takto spojím vidím historická data konkrétní stanice.

 
Nahoru Odpovědět 11. října 20:08
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na radek
Peter Mlich:12. října 10:05

Plelovsky mysli to, ze v tom tvem posl. dotazu, ktery jsem nechal zformatovat, nad i pod union jsou obe tabulky stejne, 'stanice s' a 'stanice s'. Tak, pokud jedna mela byt stanicehist, tak, snad sis to opravil :) Nahodou, velmi dobra pripominka.

Editováno 12. října 10:05
 
Nahoru Odpovědět 12. října 10:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.