ďťż
 
=?iso-8859-2?q?Z=B3=B1czenie_trzech_tabel?= ďťż
 
=?iso-8859-2?q?Z=B3=B1czenie_trzech_tabel?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

=?iso-8859-2?q?Z=B3=B1czenie_trzech_tabel?=



adam - 01-07-2006 00:57
=?iso-8859-2?q?Z=B3=B1czenie_trzech_tabel?=
  Witam, mam problem z jednym zapytaniem. W miare mozliwosci prosilbym o
pomoc. Przedstawie sytuacje:
Serwer MSSQL 2000
3 tabele:

slownik_kodow: (28000 pozycji)
nazwa
cecha1
cecha2
cecha3
cecha4
cecha5

przypisanie_do_magazynów: (59000 pozycji)
cecha1
cecha2
magazyn
ilosc_na_danym_magazynie

licz: (przyrastajaca, na razie 20 pozycji)
magazyn
cecha1
cecha2
ilosc_rzeczywista

(tabele mozna laczyc poprzez pola cecha1 i cecha2)

i chodzi mi o to zeby uzyskac zestawienie wszystkich 28000 pozycji w
postaci:
cecha1
cecha2
nazwa
ilosc_rzeczywista
ilosc_na_danym_magazynie

podajac numer magazynu

najprostsze zapytanie jakie mi przychodzi do glowy ma postac:
SELECT t1.cecha1,
t1.cecha2,
t1.nazwa,
(select JEST from t3
where
t3.cecha1 = t1.cecha1 and
t3.cecha2 = t1.cecha2 and
t3.mag = '1'

) as JEST,
(select t3.ma_byc from t3 a
where
t3.MAG_ID = '1' and
t1.KOD_TOWARU = t3.PROD_ID and
t1.KOD_ROZMIARU = t3.TAIL_ID
) as MA_BYC

FROM t1

i takie zapytanie jak najardziej działa, dostaje liste wszystkich
pozycji z wpisanymi w kolumnach (jest, ma_byc) wartosciami Null bądz
wlasciwymi ilosciami. Tyle ze zestawienie trwa długo, czasami zbyt
dlugo, gdybym chcial dostac tylko rekordy gdzie JEST > 0 to musze
podstawiac taki warunek:
where
(select JEST from t3
where
t3.cecha1 = t1.cecha1 and
t3.cecha2 = t1.cecha2 and
t3.mag = '1'

) > 0

nie wyglada to najladniej (chociaz ladnie wygladac nie musi, ma
dzialac)

Moze ktos ma lepszy pomysł na rozwiazanie tego zagadnienia?





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 02-07-2006 00:14

  adam wrote:
>
> najprostsze zapytanie jakie mi przychodzi do glowy ma postac:
> SELECT t1.cecha1,
> t1.cecha2,
> t1.nazwa,
> (select JEST from t3
> where
> t3.cecha1 = t1.cecha1 and
> t3.cecha2 = t1.cecha2 and
> t3.mag = '1'
>
> ) as JEST,
> (select t3.ma_byc from t3 a
> where
> t3.MAG_ID = '1' and
> t1.KOD_TOWARU = t3.PROD_ID and
> t1.KOD_ROZMIARU = t3.TAIL_ID
> ) as MA_BYC
>
> FROM t1
>
>
> i takie zapytanie jak najardziej działa, dostaje liste wszystkich
> pozycji z wpisanymi w kolumnach (jest, ma_byc) wartosciami Null bądz
> wlasciwymi ilosciami. Tyle ze zestawienie trwa długo, czasami zbyt
> dlugo, gdybym chcial dostac tylko rekordy gdzie JEST > 0 to musze
> podstawiac taki warunek:
> where
> (select JEST from t3
> where
> t3.cecha1 = t1.cecha1 and
> t3.cecha2 = t1.cecha2 and
> t3.mag = '1'
>
> ) > 0
>
> nie wyglada to najladniej (chociaz ladnie wygladac nie musi, ma
> dzialac)
>
> Moze ktos ma lepszy pomysł na rozwiazanie tego zagadnienia?

Pierwsza zasada, unikaj subselektów wszędzie poza from (i ewentualnie
where ... in (select....) )!
Po drugie, czemu nazwy w Twoich zapytaniach nie odpowiadają nazwom ze
struktury,
Po trzecie, to Twoje zapytanie realizuje się przy pomocy zwykłego LEFT JOIN.

--
P.M.




adam - 02-07-2006 00:14
=?iso-8859-2?q?Re:_Z=B3=B1czenie_trzech_tabel?=
  Paweł Matejski napisał(a):

> Pierwsza zasada, unikaj subselektów wszędzie poza from (i ewentualnie
> where ... in (select....) )!
> Po drugie, czemu nazwy w Twoich zapytaniach nie odpowiadają nazwom ze
> struktury,
> Po trzecie, to Twoje zapytanie realizuje się przy pomocy zwykłego LEFT JOIN.

Przepraszam, walnalem sie przy przepisywaniu: zapytanie zwracajace
wynik o ktory mi chodzi wyglada tak:
SELECT slownik_kodow.cecha1,
slownik_kodow.cecha2,
slownik_kodow.nazwa,
(select JEST from licz
where
licz.cecha1 = slownik_kodow.cecha1 and
licz.cecha2 = slownik_kodow.cecha2 and
licz.mag = '1'

) as JEST,
(select przypisanie_do_magazynów.ma_byc from
przypisanie_do_magazynów
where
przypisanie_do_magazynów.mag = '1' and
slownik_kodow.cecha1 = przypisanie_do_magazynów.cecha1
and
slownik_kodow.cecha2 = przypisanie_do_magazynów.cecha2
) as MA_BYC

FROM slownik_kodow

oczywiscie w tabeli przypisanie_do_magazynów sa osobne pary cecha1,
cecha2 z rozna wartoscia ma_byc dla roznych pozycji mag i tak samo z
tabela slownik_kodow.

Zasady znam ale ta postac zapytania jest jedyną ktora mi działa
poprawnie. Jak to zrobic na LEFT JOIN?




adam - 02-07-2006 00:14
=?iso-8859-2?q?Re:_Z=B3=B1czenie_trzech_tabel?=
  OK. Poradzilem sobie. Miales racje, tylko mnie juz czache przegrzalo i
nie pomyslalem o tym. Z 30 sekund wykonywania skryptu zszedlem do 2 :)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8 =?iso-8859-2?q?Informatyka,_Java,_EJB,_Ajax,_Spring=2E_Czy=BF by_to_koniec_=B6wiata,_czy_te=BF_nasze_uczelnie_b= EAd=B1_uczy=B3y_w_ko=F1cu!_czego_praktycznego_=2E= 2E=2E=2E?= =?iso-8859-2?q?Ati_Mobility_Radeon_X300_W_Notebooku_Jak_Zwi=E Akszy=E6_Ilo=B6=E6_Grafiki_Poprzez_Wsp=F3=B3dziele nie_Z_Ramu=3F=3F=3F?= =?ISO-8859-2?Q?=AFegnam_si=EA=2E=2E=2E?= Manager =?ISO-8859-2?Q?font=F3w=2E=2E=2E?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • shutter.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com