/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Overflødigt felt i subselect
Fra : Leif Neland


Dato : 24-06-08 13:32

Problem:
Insert into tabel1 (felt1,felt2) select top 10 "1",max(id),max(felt4) from
tabel2 group by felt3 order by felt4
Flere felter i source end i destination.

Forklaring

Jeg vil cache resultatet af et kompliceret select, fordi det lægger serveren
ned, databasen hænger, og antal samtidige connects fra webserveren stiger
til max, og jeg må genstarte IIS.

Derfor vil jeg lægge resultatet af selected i en tabel, og regenerere f.ex.
en gang i timen.

På forsiden skal vises en blok med nye varer, en blok med et antal varer fra
en kategori, en blok med et antal varer fra en anden kategori. etc.

Kriteriet er kompliceret, fordi der skal tages højde for at varen helst
skal være på lager, og den skal være i den valgte kategori, eller en under
eller under-under- osv til den valgte.

Så jeg vil lave en tabel, der blot indeholder records med blok-id, og
vare-id for de varer, der er kvalificeret til at blive vist i den blok.

Der er varer, der deler det samme billede, f.ex. flere varianter/størrelser
af den samme ting, så derfor vælger jeg det første produkt pr billede

insert into blokprod (blokid,vareid) select 1,min(id) from varer where .....
group by billede

Det fungerer.

Men hvis jeg vil have de sidste 10 nyheder, så laver jeg et select:


select top 10 min(id),min(oprettet) as oprettet
from varer where...
group by billede
order by oprettet desc

Jeg bliver nødt til at have 'oprettet' i select-listen, for at sortere efter
den, men jeg vil ikke sætte den ind i min blokprod-tabel.
Kan det undgås, eller bliver jeg nødt til at lave et ekstra felt i
destinationen?

insert into blokprod(blokid,vareid,NULL) select top 10
"1",min(id),min(oprettet)....

Leif



 
 
Henrik Davidsen (24-06-2008)
Kommentar
Fra : Henrik Davidsen


Dato : 24-06-08 17:41

> select top 10 min(id),min(oprettet) as oprettet
> from varer where...
> group by billede
> order by oprettet desc
>
> Jeg bliver nødt til at have 'oprettet' i select-listen, for at sortere
> efter den

Ehh, hvorfor bliver du nødt til det? Jeg skulle da mene at man sagtens kan
lave en order by på en kolonne som man ikke selecter ud. Faktisk er det jo
ikke "oprettet" du selecter ud, men "min(oprettet)". Har du prøvet om order
by ikke dur uden du selecter den ud?

/Sjang



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste