Problem z zapytaniem SQL
Fantom - 03-02-2006 09:53
Problem z zapytaniem SQL
Witam mam zapytanie typu SELECT suma(x), suma(y) from tab1 left join tab2
No i x jest z tab1 a y z tab2. Po takim zapytaniu suma(y) raczej zawsze jest ok, ale suma (x) czasmi jest zawyzona, bo np jest kilka rekordow z tab 2 pasujacych do joina i wtedy powielane sa dane z tab1 i sumowane kilka razy. Jak tego uniknac ?
Fantom odpowiedz moze byc do dowolnej bazy danych - jakos dopasuje do swojej
Marek Malczewski - 03-02-2006 09:53
Fantom wrote:
> Witam > mam zapytanie typu > SELECT suma(x), suma(y) > from tab1 left join tab2 > > No i x jest z tab1 a y z tab2. Po takim zapytaniu suma(y) raczej zawsze > jest ok, ale suma (x) czasmi jest zawyzona, bo np jest kilka rekordow z > tab 2 pasujacych do joina i wtedy powielane sa dane z tab1 i sumowane > kilka razy. Jak tego uniknac ? > > Fantom > odpowiedz moze byc do dowolnej bazy danych - jakos dopasuje do swojej
Ja bym sprobowal czegos zblizonego do tego: select (select sum(x) from tab1), (select sum(y) from tab2)
Fantom - 03-02-2006 09:54
> > Witam > > mam zapytanie typu > > SELECT suma(x), suma(y) > > from tab1 left join tab2 > > > > No i x jest z tab1 a y z tab2. Po takim zapytaniu suma(y) raczej zawsze > > jest ok, ale suma (x) czasmi jest zawyzona, bo np jest kilka rekordow z > > tab 2 pasujacych do joina i wtedy powielane sa dane z tab1 i sumowane > > kilka razy. Jak tego uniknac ? > > > > Fantom > > odpowiedz moze byc do dowolnej bazy danych - jakos dopasuje do swojej > > Ja bym sprobowal czegos zblizonego do tego: > select (select sum(x) from tab1), (select sum(y) from tab2)
Tak mialem oryginalnie, ale zapytanie jest dluuuugie (kilkadziesiat linijek) i nie bylo optymalne - chce to jakos przerobic aby bylo szybsze
Fantom
Kedzier - 03-02-2006 09:54
Fantom napisał(a): > Witam > mam zapytanie typu > SELECT suma(x), suma(y) > from tab1 left join tab2 > > No i x jest z tab1 a y z tab2. Po takim zapytaniu suma(y) raczej zawsze jest > ok, ale suma (x) czasmi jest zawyzona, bo np jest kilka rekordow z tab 2 > pasujacych do joina i wtedy powielane sa dane z tab1 i sumowane kilka razy. > Jak tego uniknac ?
he, a gdzie pola łączące? na moj gust brakuje ci klałzuli 'on' wiec baza daje ci jakies dziwne zlaczenie w rodzaju cross join, a przynajmniej tak mi sie wydaje! i dlatego pewnie ci zawyża sumy!
pozdr, Piotrek
Fantom - 03-02-2006 09:55
> > Witam > > mam zapytanie typu > > SELECT suma(x), suma(y) > > from tab1 left join tab2 > > > > No i x jest z tab1 a y z tab2. Po takim zapytaniu suma(y) raczej zawsze jest > > ok, ale suma (x) czasmi jest zawyzona, bo np jest kilka rekordow z tab 2 > > pasujacych do joina i wtedy powielane sa dane z tab1 i sumowane kilka razy. > > Jak tego uniknac ? > > he, a gdzie pola łączące? > na moj gust brakuje ci klałzuli 'on' wiec baza daje ci jakies dziwne > zlaczenie w rodzaju cross join, a przynajmniej tak mi sie wydaje! i > dlatego pewnie ci zawyża sumy!
Spokojnie :) w tej bazie takie zapyanie laczy po kluczu wiec pod tym katem jest wszytsko ok. Dziala jak najbardzie prawidlowo to zlaczenie. chodzi o to, ze dla jednego tab1 moze byc np 5 razy tab2. I wtedy tab1 jest 5 razy sumowane i wychodzi bzdura
Fantom
red jamezz - 03-02-2006 09:55
Fantom <szczukot@skasujto.poczta.onet.pl> napisał(a):
> Witam > mam zapytanie typu > SELECT suma(x), suma(y) > from tab1 left join tab2 > > No i x jest z tab1 a y z tab2. Po takim zapytaniu suma(y) raczej zawsze jest > ok, ale suma (x) czasmi jest zawyzona, bo np jest kilka rekordow z tab 2 > pasujacych do joina i wtedy powielane sa dane z tab1 i sumowane kilka razy. > Jak tego uniknac ? > > Fantom > odpowiedz moze byc do dowolnej bazy danych - jakos dopasuje do swojej >
a tak ?
SELECT suma(x) from tab1 union all SELECT suma(y) from tab2
-- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Fantom - 04-02-2006 14:52
> a tak ? > > SELECT suma(x) from tab1 > union all > SELECT suma(y) from tab2
takie cos nie zadziala bo musza byc powiazane wybrane i na dodatek maja lezec w jednym rekordzie
Fantom
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
zanotowane.pldoc.pisz.plpdf.pisz.platanvarne633.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|