Předvánoční slevová akce PHP týden
Pouze tento týden sleva až 80 % na PHP e-learning!
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde
Avatar
Jan Hlavatý
Člen
Avatar
Jan Hlavatý:17. října 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. října 15:04
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:17. října 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. října 21:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18. října 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. října 8:14
 
Nahoru Odpovědět
18. října 8:14
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jan Hlavatý
Člen
Avatar
Jan Hlavatý:19. října 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. října 10:47
Avatar
Jan Hlavatý
Člen
Avatar
Jan Hlavatý:19. října 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. října 11:02
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:21. října 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. října 8:24
 
Nahoru Odpovědět
21. října 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.