Forum » Programiranje » [T-SQL] problem
[T-SQL] problem
nurmaln ::
En problemčič, prosim za pomoč
Tabela 1
Stolpci
[Št Artikla] [Ime Artikla]
Tabela 2
PRIMER:
[Št Artikla] [Lastnost1] [Lastnost2] [Lastnost3] [Vrednost]
1000 A A A xxx
1000 A B A xxx
1000 A A C xxx
1000 C C B xxx
1000 B C A xxx
KAJ RABIM??
Rabim tabelo s sledečimi STOLPCI:
[Št Artikla]
[Ime Artikla]
[Vrednost ob Lastnost1='3' AND Lastnost2='3' AND Lastnost3='2']
[Vrednost ob Lastnost1='1' AND Lastnost2='2' AND Lastnost3='1']
[Vrednost ob Lastnost1='1' AND Lastnost2='1' AND Lastnost3='1']
Kako za vraga do tega?
Sicer mi je že uspelo ampak ko poženem na bazi mi melje 10 minut, tako da moja rešitev ni najboljša
Dejte pomagat no...
Tabela 1
Stolpci
[Št Artikla] [Ime Artikla]
Tabela 2
PRIMER:
[Št Artikla] [Lastnost1] [Lastnost2] [Lastnost3] [Vrednost]
1000 A A A xxx
1000 A B A xxx
1000 A A C xxx
1000 C C B xxx
1000 B C A xxx
KAJ RABIM??
Rabim tabelo s sledečimi STOLPCI:
[Št Artikla]
[Ime Artikla]
[Vrednost ob Lastnost1='3' AND Lastnost2='3' AND Lastnost3='2']
[Vrednost ob Lastnost1='1' AND Lastnost2='2' AND Lastnost3='1']
[Vrednost ob Lastnost1='1' AND Lastnost2='1' AND Lastnost3='1']
Kako za vraga do tega?
Sicer mi je že uspelo ampak ko poženem na bazi mi melje 10 minut, tako da moja rešitev ni najboljša
Dejte pomagat no...
- spremenilo: snow ()
snow ::
Pravila igre: PREBERI ME: označevanje topicov v oddelku programiranje.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
zerox ::
Mja na pamet mi padejo tudi samo trije gnezdeni selecti s tremi ANDi :) ali pa trije joini nase oboje je po mojem enako počasno :).
glede hitrosti lahko mogoče z indeksiranjem polij kaj pridobiš.
glede hitrosti lahko mogoče z indeksiranjem polij kaj pridobiš.
nurmaln ::
no ja sej sam sem zadevo začasno rešil tako, sem naredil selecte s po tremi kriteriji
ker vse skupaj povežem še na prodajo mi dela za en dan prodaje cca 3 minute, za en mesec cca 10 minut
nimam dost poguma, da bi zadevo zagnal za kvartal ali celo leto
ker vse skupaj povežem še na prodajo mi dela za en dan prodaje cca 3 minute, za en mesec cca 10 minut
nimam dost poguma, da bi zadevo zagnal za kvartal ali celo leto
zerox ::
malo na pamet.. pa nisem čisto tvojih imen jemal :) so predolga za tipkat
primer z join-i
SELECT A.id,D.ime,A.valx,B.valx,C.valx
FROM TABELA A
LEFT JOIN TABELAIMEN D
ON A.id = D.id
LEFT JOIN TABELA B
ON A.id = B.ID AND (B.l1 ='1' AND B.l2 ='2' AND B.l3='1')
LEFT JOIN TABELA c
ON A.id = c.ID AND (C.l1 ='1' AND C.l2 ='1' AND C.l3='1')
WHERE (A.l1 ='3' AND A.l2 ='3' AND A.l3='2')
upam da nisem pri logiki kiksnil - tudi če dela pravilno po mojem ne bo veliko hitreje. Ena možnost bi bila res, da probaš lastnosti 1 do 3 poindeksirat.
edit -> moj primer dela bolj pravilno v kolikor ima nek artikel lastnosti, ki padejo v prvi pogoj (A) in lastnosti, ki padejo v drugi pogoj(B). Pri tretjem so pač nulli, če ne obstajajo takšne vrednosti. Se opravičujem če sem nerazumljiv
edit2: sedaj sem pa celo šel naredit en testni primer, ki deluje tudi, če nek artikel npr nima vrednosti, ki bi izpolnjevale katerega izmed pogojev - tam dam not 0 namesto NULL. Testen primer ~2k zapisov vrne v manj kot sekundi.
SELECT D.id, D.ime,COALESCE(A.valx,0),COALESCE(B.valx,0),COALESCE(C.valx,0)
FROM IMENA D
FULL OUTER JOIN TABELA A
ON A.id = D.iD AND (A.l1 ='3' AND A.l2 ='3' AND A.l3='2')
FULL OUTER JOIN TABELA B
ON D.id = B.ID AND (B.l1 ='1' AND B.l2 ='2' AND B.l3='1')
FULL OUTER JOIN TABELA c
ON D.id = c.ID AND (C.l1 ='1' AND C.l2 ='1' AND C.l3='1')
WHERE D.id IS NOT NULL
primer z join-i
SELECT A.id,D.ime,A.valx,B.valx,C.valx
FROM TABELA A
LEFT JOIN TABELAIMEN D
ON A.id = D.id
LEFT JOIN TABELA B
ON A.id = B.ID AND (B.l1 ='1' AND B.l2 ='2' AND B.l3='1')
LEFT JOIN TABELA c
ON A.id = c.ID AND (C.l1 ='1' AND C.l2 ='1' AND C.l3='1')
WHERE (A.l1 ='3' AND A.l2 ='3' AND A.l3='2')
upam da nisem pri logiki kiksnil - tudi če dela pravilno po mojem ne bo veliko hitreje. Ena možnost bi bila res, da probaš lastnosti 1 do 3 poindeksirat.
edit -> moj primer dela bolj pravilno v kolikor ima nek artikel lastnosti, ki padejo v prvi pogoj (A) in lastnosti, ki padejo v drugi pogoj(B). Pri tretjem so pač nulli, če ne obstajajo takšne vrednosti. Se opravičujem če sem nerazumljiv
edit2: sedaj sem pa celo šel naredit en testni primer, ki deluje tudi, če nek artikel npr nima vrednosti, ki bi izpolnjevale katerega izmed pogojev - tam dam not 0 namesto NULL. Testen primer ~2k zapisov vrne v manj kot sekundi.
SELECT D.id, D.ime,COALESCE(A.valx,0),COALESCE(B.valx,0),COALESCE(C.valx,0)
FROM IMENA D
FULL OUTER JOIN TABELA A
ON A.id = D.iD AND (A.l1 ='3' AND A.l2 ='3' AND A.l3='2')
FULL OUTER JOIN TABELA B
ON D.id = B.ID AND (B.l1 ='1' AND B.l2 ='2' AND B.l3='1')
FULL OUTER JOIN TABELA c
ON D.id = c.ID AND (C.l1 ='1' AND C.l2 ='1' AND C.l3='1')
WHERE D.id IS NOT NULL
Zgodovina sprememb…
- spremenil: zerox ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | sql, negacija ..Oddelek: Programiranje | 714 (609) | BRBR |
» | MS Access (strani: 1 2 )Oddelek: Programiranje | 7374 (5432) | travica |
» | Normalizirana struktura - queryOddelek: Programiranje | 1719 (1339) | frudi |
» | MySQL Query VprašanjeOddelek: Izdelava spletišč | 3201 (2966) | overlord_tm |
» | [MySql] obratno od DISTINCTOddelek: Programiranje | 1444 (1262) | frudi |