IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jan Hlavatý
Člen
Avatar
Jan Hlavatý:17.10.2019 15:04

Mám v Access 3 tabulky, celkem přes 13 tis záznamů. Potřebuji ty tabulky spojit do jedné, ale současně při tom jejich spojení potřebuji vytvořit nový sloupec, ve kterém by bylo uvedeno, ze které původní tabulky záznam pochází.

Zkusil jsem: Spojit ty tři tabulky dohromady umím.
Neumím ale přijít na to, jak tam přidat ten nový sloupec?

SELECT *
FROM tblA
UNION ALL
SELECT *
FROM tblB
UNION ALL
SELECT *
FROM tblC

Chci docílit: Snažím se dosáhnout toho, aby v nově vytvořené tabulce přibyl sloupec, ve kterém by bylo uvedeno, ze které tabulky který záznam pochází (např. by obsahoval hodnoty A, B, C).

 
Odpovědět
17.10.2019 15:04
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:17.10.2019 21:51
SELECT a, b, c, 1 AS d -- normalne pouzij hodnotu a alias
FROM tblA
UNION ALL
SELECT e AS a, f AS b, g AS c, 2 AS d
FROM tblB
UNION ALL
SELECT *, 3 AS d
-- nebo bez aliasu, podle toho, zda vybiras sloupce jako cislo nebo text
FROM tblC

Nevim, jak to access dela, mozna sloupce cisluje, mozna by stacilo jen:

*, 1 -- nebo
*, '1'
Akceptované řešení
+20 Zkušeností
Řešení problému
 
Nahoru Odpovědět
17.10.2019 21:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18.10.2019 8:14

Takhle, abys pochopil, o co bezi v sql prikazu

SELECT sloupce -- vyber sloupce
FROM tabulka -- z tabulky
WHERE x>10 -- kde plati, ze sloupec x je vetsi nez 10
ORDER BY x ASC -- serad podle x od nejmensiho po nejvetsi
LIMIT 4, 10 -- a z vysledne tabulky zobraz jen radky 4 az 14

Ale nevim, co vsechno z SQL syntaxe lze pouzit. A jeste do toho muzes primichat grupovani a pod.
Sloupce v SELECT je vetsinou lepsi vypsat. * zrovna u UNION muze delat problem. Sql obvykle vyzaduje, aby pocet sloupcu byl stejny a mam pocit, ze i stejny alias. Cili, kdybys v unionu mel tabulky s rozdilnym poctem sloupcu, tak bys musel doplnit aspon null.
*... UNION...
*, null... UNION...
*, 0, '', ''...

Editováno 18.10.2019 8:14
 
Nahoru Odpovědět
18.10.2019 8:14
Avatar
Jan Hlavatý
Člen
Avatar
Jan Hlavatý:19.10.2019 10:47

Jojo, to první, co jsi napsal, funguje.
O co běží v SQL příkazu mi je jasné, jen jsem netušil, že si takto na drzo mohu říci o přidání nového sloupce. Já to mezi tím zkoušel obejít třemi pomocnými tabulkami, které jsem pak skládal dohromady. Takhle přidám něco málo do příkazu, a dělá to to samé.
Počty sloupců ve zdrojových tabulkách jsou stejné.
Díky moc za navedení ...

 
Nahoru Odpovědět
19.10.2019 10:47
Avatar
Jan Hlavatý
Člen
Avatar
Jan Hlavatý:19.10.2019 11:02

Jen ještě kdyby někdo řešil stejný oříšek, tak výsledný příkaz u mě vypadá takto:

SELECT *, "A" as Zdroj
FROM tblA
UNION ALL
SELECT *, "B" as Zdroj
FROM tblB
UNION ALL
SELECT *, "C" as Zdroj
FROM tblC

 
Nahoru Odpovědět
19.10.2019 11:02
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:21.10.2019 8:24

Tak, jestli by slo o pomocne tabulky, tak bych to resil asi takto

tab pomocna
typ, text
1, 'A'
2, 'B'

SELECT *, b.text
FROM tab1 a
LEFT JOIN tab2 b ON b.typ=1

UNION

SELECT *, b.text
FROM tab1 a
LEFT JOIN tab2 b ON b.typ=2

Ze bys v pomocne tabulce mel text, ktery tam dosadis podle typ (id).

Editováno 21.10.2019 8:24
 
Nahoru Odpovědět
21.10.2019 8:24
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.