Portál AbcLinuxu, 12. května 2025 22:19
SELECT * FROM user_log UNION ALL logTak 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:
select * from( select 'user_log',col1,col2,null from user_log union all select 'log',col1,null,col2 from log ) where col1=42Pokud je chcete spojit, použijete join (inner, left, right, full, cross)
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.