Autor | Zpráva | ||
---|---|---|---|
MaK Profil |
#1 · Zasláno: 18. 1. 2013, 08:50:59
Mám tabulku:
CREATE TABLE t1 ( id INTEGER UNSIGNED PRIMARY KEY, c INTEGER ) a tabulku t2, která je identická. Pokud pro konkretní id záznam v tabulce není, má se za to, že hodnota c je nula. Mám sestrojit dotaz, který vrátí součet sloupců c (t1.c + t2.c) pro konretní id. Jinak řečeno, pokud je pro dané id zaznam: + jen v t1 - vrací dotaz hodnotu t1.c + jen v t2 - vrací dotaz hodnotu t2.c + v t1 i t2 - vrací dotaz součet t1.c+t2.c + nikde - vrací nulu Vyšlo mi následujicí řešení, ale to se mi zdá poněkud obskurní: SELECT (SELECT IFNULL(SUM(c),0) FROM t1 WHERE id = 1) + (SELECT IFNULL(SUM(c),0) FROM t2 WHERE id = 1) ; Jde to nějak lépe? MaK |
||
Tori Profil |
#2 · Zasláno: 18. 1. 2013, 09:08:32
MaK:
Jsou obě tabulky zhruba stejně velké, anebo je mezi nimi rozdíl v počtu řádků? (rozdíl = nezanedbatelný, aspoň 10:6) |
||
MaK Profil |
#3 · Zasláno: 18. 1. 2013, 09:13:53 · Upravil/a: MaK
Tori:
t1 je 100x vetsi nez t2 (t2 je neco jako cache t1). peta: Nefunguje pro pripady, kdy je zaznam pouze v jedne z tabulek. |
||
Tori Profil |
#4 · Zasláno: 18. 1. 2013, 09:25:23
Špatně jsem si to přečetla, myslela jsem, že chcete vypsat všechny, proto jsem se ptala.
SELECT IFNULL(SUM(c), 0) FROM (SELECT c FROM t1 WHERE id = 1 UNION ALL SELECT c FROM t2 WHERE id = 1) |
||
Kajman Profil |
#5 · Zasláno: 18. 1. 2013, 09:33:17
Použil bych dotaz z [#1]
|
||
MaK Profil |
#6 · Zasláno: 18. 1. 2013, 09:39:15
Kajman:
Proc? Pouziti UNIONu se mi zda logicke a prehledne. |
||
Kajman Profil |
#7 · Zasláno: 18. 1. 2013, 12:37:25
Mně se zdá, že sčítání součtů jednotlivých tabulek může být o fous rychlejší než sčítání spojených hodnot z více tabulek. Můžete si to změřit.
|
||
Časová prodleva: 11 let
|
0