Citat:
Poenta je bila izbeći masovno dodavanje podataka u bazu (reda miliona)
čemu je svako rešenje manje više vodilo
Nisam to nigde primetio :-)
Covek je na pocetku trazio kveri, dali su mu kursor. Ponudjen je jos jedan predlog, pomocna tabela, sto se nekome moze dopasti a nekome ne. U svakom slucaju, nije zabranjeno niti nemoralno resenje:-)
Citat:
Subquery ne posmatram kao poslednju reč tehnologije poznatu samo manjini
mislim da u svakom priručnike za sql možete naći nešto o tome u prvih par strana
Iskustva su razlicita, ono sto sam ja video u praksi govori mi da subkveri i nije tako jednostavna stvar za vecinu. Ako spadas u manjinu kojoj pisanje subkverija u letu nije problem, svaka cast, kako ovde kazu 'Good for you'.
Forum je da se razmenjuju ideje. Kroz ideju o tabeli pokazali smo i kako se moze koristiti opcija WITH, novina koju je doneo SQL 2005.
Sto se tice miliona redova u nekoj tamo tabeli, ne bih se uzbudjivao mnogo oko toga, prostor na disku je danas jeftin. Gde ja radim, programer koji ume da pise subkverije u letu kosta bar 50,000 na godinu. Za 1800 sati godisnje to izadje oko 30 dolara na sat. Da se napise kveri koji pronalazi rupe u sekvencama, na primer, a radi korektno, treba 2 sata, za nekoga ko se prvi put srece sa takvim problemom. To je 60 dolara. Za 60 dolara mogu da kupim dovoljno gigabajta da pokrijem jednu takvu tabelu. A ne moram ni da je kreiram kao stalnu tabelu, sa WITH mogu da napravim virtualnu tabelu (nije ni temp, nego bas virtualna). Koliko RAMa mogu da kupim za 60 dolara?
Usput, jos ne videsmo potpuno korektno resenje za problem "pronaci brojeve koji nedostaju u sekvencijalnim nizovima rekorda" . Potrazite po prirucnicima, u prvih par strana, mozda ima cak i gotovo resenje, da se samo prepise.
Evo, kako je darkMan poceo:
Code:
DROP TABLE temp (ID int PRIMARY KEY CHECK (ID>0))
insert into temp values(1)
insert into temp values(2)
insert into temp values(5)
insert into temp values(6)
insert into temp values(7)
insert into temp values(10)
insert into temp values(15)
SELECT * FROM temp
ID
-----------
1
2
5
6
7
10
15
(7 row(s) affected)
-- DarkManovo resenje, sve rupe
select ID+1 from temp where ID+1 not in (select ID from temp) and ID < (select max(ID) from temp)
-----------
3
8
11
(3 row(s) affected)
DarkMan je pronasao samo
pocetak svake rupe. To nam ne kazuje kolika je rupa, koliko brojeva nedostaje. Hocu da vidim nesto kao
Code:
Nedostaju_Brojevi_OD DO
-------------------- -----------
3 4
8 9
11 14
(3 row(s) affected)
Ovo sam dobio pomocu subkverija. Toliko je komplikovano da ne zelim da ga objavim odmah, dok ne vidimo da li ce neko ponuditi jednostavnije resenje
Teks, ti si na potezu :-)
A posle toga cemo prosiriti pitanje na:
pokazati sve brojeve koji nedostaju. - hocemo recimo da ih insertujemo posto nedostaju.