Autor | Zpráva | ||
---|---|---|---|
Toníček Profil * |
#1 · Zasláno: 5. 1. 2019, 10:29:08
Zdravím,
Přemýšlím nad jedním SQL - potřebuji porovnat cenu objednávky s platbou a vypsat pouze uhrazené objednávky. Ovšem cenu objednávky zjistím z tabulky objednanch produktů a přijatou částku zase z tabulky plateb. Ve zkratce to asi pochopite, co chci vymyslet z tohoto sql: To mi ovšem vrací ( Unknown column 'celkemPlatba' in 'where clause' ) SELECT ord.*, SUM(objednane.cena)) as cenaObjednavky, SUM(pl.castka) as celkemPlatba FROM objednavky obj LEFT JOIN objednavky_produkty objednane ON obj.id=objednane.objednavka_id LEFT JOIN platby pl ON obj.vs=pl.vs WHERE pl.zruseno=0 AND celkemPlatba>=cenaObjednavky AND obj.datum>... ORDER BY obj.id DESC objednane.cena = cena produktu pl.castka = prijata castka SUM je protože jich může být více a potřebuji sečíst všechny položky. |
||
Kajman Profil |
Podmínka na agregované funkce patří do having, ale stejně to nebude fugnovat. Když uděláte joiny na více tabulek, které mohou odpovídat více řádky, tak by se to celé násobilo a součty nebudou sedět.
Zkuste použít korelované poddotazy. Něco jako SELECT t.* FROM (SELECT obj.*, (SELECT Sum(objednane.cena) FROM objednavky_produkty objednane WHERE obj.id = objednane.objednavka_id) AS cenaObjednavky, (SELECT Sum(pl.castka) FROM platby pl WHERE obj.vs = pl.vs AND pl.zruseno = 0) AS celkemPlatba FROM objednavky obj WHERE obj.datum >= Date('2017-01-01')) t WHERE celkemPlatba >= cenaObjednavky ORDER BY t.id DESC Kdyby to s nimi bylo moc pomalé, teprve bych to zkusil přepsat jinak. |
||
Časová prodleva: 5 let
|
0