» »

[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 :D

Dejte pomagat no...
  • spremenilo: snow ()

snow ::

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š.

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:(

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

Zgodovina sprememb…

  • spremenil: zerox ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

sql, negacija ..

Oddelek: Programiranje
6708 (603) BRBR
»

MS Access (strani: 1 2 )

Oddelek: Programiranje
647336 (5394) travica
»

Normalizirana struktura - query

Oddelek: Programiranje
191710 (1330) frudi
»

MySQL Query Vprašanje

Oddelek: Izdelava spletišč
153176 (2941) overlord_tm
»

[MySql] obratno od DISTINCT

Oddelek: Programiranje
101436 (1254) frudi

Več podobnih tem