Portál AbcLinuxu, 12. května 2025 22:19

Dotaz: Jak spojit vše ze dvou tabulek

20.4.2013 11:25 Dan
Jak spojit vše ze dvou tabulek
Přečteno: 886×
Odpovědět | Admin
Zdravím, mám dvě tabulky (user_log a log) a chtěl bych je vypsat do jedné tabulky, ale když jsem zkoušel:
SELECT * FROM user_log UNION ALL log
Tak my to vyhodí vyjímku The used SELECT statements have a different number of columns Já bych ale potřeboval všechny data z obou tabulek a nad nimi udělat WHERE created > '2013-02-02' user_log má 10 sloupcá a log jen 5, takže bych pak ve výpisu prostě nechal prázdné místo když tam ta hodnota nění. Jak něco takového udělat?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.4.2013 11:56 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Jak spojit vše ze dvou tabulek
Odpovědět | | Sbalit | Link | Blokovat | Admin
outer join ?

Môžeš sem dať štruktúru tých tabuliek?
20.4.2013 14:20 jekub
Rozbalit Rozbalit vše Re: Jak spojit vše ze dvou tabulek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud ty tabulky nesouvisí, tak je chcete sjednotit. To samozrejme je možné. Např.
select * from(
select 'user_log',col1,col2,null from user_log
union all
select 'log',col1,null,col2 from log
) where col1=42
Pokud je chcete spojit, použijete join (inner, left, right, full, cross)
Řešení 1× (jekub)
21.4.2013 22:36 Logik
Rozbalit Rozbalit vše Re: Jak spojit vše ze dvou tabulek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevím, jestli Ti to je z předchozích odpovědí jasný, ale pokud jak předpokládám chceš ty tabulky pod sebou, tak z jedné musíš udělat takový select, aby datový typy odpovídaly datovým typům v druhé tabulce. Pokud tabulce log odpovídá prvních pět sloupců v user_log, jde to takto:

SELECT * FROM user_log UNION ALL SELECT log.*, null, null, null, null, null FROM log

...pokud jsou sloupce napřeskáčku, nezbyde Ti, než v druhém selectu sloupce postupně vyjmenovat a proložit null.

V některých databázích je také třeba určit datový typ toho null sloupce, např. CAST(null as integer)

Pak je ještě o něco čistší cesta: Vytvoř si nad log view (pomocí selectu výše) a pak udělej jednoduchej union na ten view.

Ale pokud něco takového potřebuješ, zamyslel bych se, zdali ve skutečnosti není chyba v návrhu a neměla být původně tabulka log a log_user jedna dohromady.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.