/ 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
Mysql innerjoins, outerjoins ?
Fra : Ukendt


Dato : 26-09-02 16:44

Hejsa gruppe

Jeg sidder med en mysql database hvor jeg sikkert skal til at bruge
innerjoins eller outerjoins... men jeg ved ikke helt hvordan det
virker og har søgt efter en rigtig god beskrivelse af funktionerne men
kunne ikk lige finde den rigtige der bare sagde "så har du lært det"

Så derfor ville jeg være MEGET interesseret i et link.. GERNE på dansk
(og gerne med diverse eksempler)

Ellers så må jeg stille spørgsmålet her

 
 
Jakob Møbjerg Nielse~ (26-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 26-09-02 16:59

-Martin- wrote:
> Så derfor ville jeg være MEGET interesseret i et link.. GERNE på dansk
> (og gerne med diverse eksempler)


Det er godt nok ikke på dansk, men:

http://www.w3schools.com/sql/sql_join.asp

Ellers kan du bare skrive hvad du vil, så skal jeg (eller andre) nok
svare dig

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Jakob Møbjerg Nielse~ (26-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 26-09-02 17:14

Jakob Møbjerg Nielsen wrote:
> http://www.w3schools.com/sql/sql_join.asp

PS:

LEFT JOIN er det samme som LEFT OUTER JOIN, og det samme gælder for
RIGHT JOIN. Der findes desuden en FULL OUTER JOIN, der padder begge
tabeller med null hvis der ikke er matchende værdier.

Desuden findes der NATURAL, CROSS og UNION joins, men de bliver sjældent
brugt.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Niels Andersen (26-09-2002)
Kommentar
Fra : Niels Andersen


Dato : 26-09-02 17:16

Jakob Møbjerg Nielsen wrote in <amvbnf$s0h$1@sunsite.dk>:
> Der findes desuden en FULL OUTER JOIN, der padder begge
> tabeller med null hvis der ikke er matchende værdier.

Jeg bruger sjældent andet end LEFT JOIN, og det ser ud til at min hukommelse
svigter mig.
Sådan ville jeg nemlig beskrive OUTER JOIN. Hvor er fejlen? :)

Vi er enige om at INNER JOIN kun giver rækker, der har værdier i begge
tabeller, right?

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Jakob Møbjerg Nielse~ (26-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 26-09-02 17:30

Niels Andersen wrote:
> Jeg bruger sjældent andet end LEFT JOIN, og det ser ud til at min
> hukommelse svigter mig.
> Sådan ville jeg nemlig beskrive OUTER JOIN. Hvor er fejlen? :)

Jeg tror bare at det er en forkortelse:

LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

Som forkortes hhv.:

LEFT JOIN
RIGHT JOIN
OUTER JOIN

> Vi er enige om at INNER JOIN kun giver rækker, der har værdier i begge
> tabeller, right?

Jeps.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Ukendt (26-09-2002)
Kommentar
Fra : Ukendt


Dato : 26-09-02 17:51

>Ellers så må jeg stille spørgsmålet her

Det tror jeg vist jeg gør!

Jo...

Jeg har 3 tabeller i min database (mysql)

Den ene tabel er vare
den indeholder
VareID, VareNavn og diverse andre men uden betydning

Den anden er Varepris
den indeholder
VareprisID, Vare_ID, VareKR, VareORE, Pengetype_ID, VareprisTime
og diverse andre uden betydning

Den 3. er Pics
den indeholder
PicsID, Vare_ID, PicsNavn

Det jeg gerne vil er at
vælge 1 enkelt række i tabellen vare som jeg får med vareID'et...
intet problem der

Men så i varepris bliver det sjovt...
Der skal jeg vælge de 7 nyeste rækker ud fra Vare_ID

også i Pics der skal jeg så vælge alle med samme Vare_ID (der kan både
være 0,1 eller flere billeder at vælge)

Nu arbejder jeg jo med PHP og ja hvordan udskriver jeg det så?

Er det med en list() *fordi jeg vælger jo kun 1 række* eller med en
while løkke *da der kan forekomme flere linjer*

Jakob Møbjerg Nielse~ (26-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 26-09-02 23:11

-Martin- wrote:
> Det jeg gerne vil er at
> vælge 1 enkelt række i tabellen vare som jeg får med vareID'et...
> intet problem der
>
> Men så i varepris bliver det sjovt...
> Der skal jeg vælge de 7 nyeste rækker ud fra Vare_ID
>
> også i Pics der skal jeg så vælge alle med samme Vare_ID (der kan både
> være 0,1 eller flere billeder at vælge)

Det vil jeg i hvert fald ikke gøre med joins, men derimod med flere SQL
kald. Jeg kan ikke lige overskue det nu, men jeg tror heller ikke at det
kan lade sige gøre at lave begrænsningen på de 7 rækker.

> Nu arbejder jeg jo med PHP og ja hvordan udskriver jeg det så?
>
> Er det med en list() *fordi jeg vælger jo kun 1 række* eller med en
> while løkke *da der kan forekomme flere linjer*

Der må du spørge i PHP gruppen... et hint:

$result = mysql_query("SELECT VareNavn FROM vare");
while ($row = mysql_fetch_array($result)) {
echo $row['VareNavn'];
}

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Jakob Møbjerg Nielse~ (26-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 26-09-02 23:12

Jakob Møbjerg Nielsen wrote:
> men jeg tror heller ikke
> at det kan lade sige gøre at lave begrænsningen på de 7 rækker.

Hvis man vælger at bruge joins, that is.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Kristian Damm Jensen (27-09-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 27-09-02 09:30

"Jakob Møbjerg Nielsen" wrote:
>
> Jakob Møbjerg Nielsen wrote:
> > men jeg tror heller ikke
> > at det kan lade sige gøre at lave begrænsningen på de 7 rækker.
>
> Hvis man vælger at bruge joins, that is.

Select * from foo where bar sort by foobar
LIMIT 7

Gør det ikke, hvad der er behov for?

--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.



Jakob Møbjerg Nielse~ (27-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-09-02 10:07

Kristian Damm Jensen wrote:
> Select * from foo where bar sort by foobar
> LIMIT 7
>
> Gør det ikke, hvad der er behov for?

Jo, men hvordan vil du gøre det her

SELECT * FROM vare INNER JOIN Varepris ON vare.VareID = Varepris.Vare_ID

således at det er de 7 nyeste Varepris.Vare_ID der bliver joinet med for
hver vare.VareID?

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Kristian Damm Jensen (27-09-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 27-09-02 10:47

"Jakob Møbjerg Nielsen" wrote:
>
> Kristian Damm Jensen wrote:
> > Select * from foo where bar sort by foobar
> > LIMIT 7
> >
> > Gør det ikke, hvad der er behov for?
>
> Jo, men hvordan vil du gøre det her
>
> SELECT * FROM vare INNER JOIN Varepris ON vare.VareID = Varepris.Vare_ID
>
> således at det er de 7 nyeste Varepris.Vare_ID der bliver joinet med for
> hver vare.VareID?

Hm. En udfordring.

Der findes i VarePris en række med navnet VareprisTime. Jeg går ud fra
at den indeholder en form for tidsstempel.

I så fald vil

SELECT * FROM vare INNER JOIN Varepris ON vare.VareID = Varepris.Vare_ID
ORDER BY VareprisTime Desc
LIMIT 7

løse problemet. Eller? Nej, det begrænser det samlede antal.

Okay, så mere ambitiøst

SELECT * FROM vare INNER JOIN Varepris vp1 ON vare.VareID = vp1.Vare_ID
where varepristime
(select varepristime from varepris vp2
where vp1.vare_ID = vp2.vare_ID
ORDER BY VareprisTime Desc
LIMIT 7)

Men MySQL understøtter ikke subselect, og selv hvis de gjorde er det
vist ikke normalt at acceptere order by (endsige limit) i en subselect.

Men hvis vi laver

select v2.vare_id
from varepris1 join varepris2
on v1.vare_id = v2.vare_id
where v1.varepristime >= v2.varepristime
group by v2.vare_id
having count(*) < 8

så finder vi de vare_id fra varepris, hvor der er mindre end 8 rækker
med samme vare_id, der har en nyere varetpristime.

Dette kan så strikkes ind i det første, og så får vi

SELECT * FROM vare INNER JOIN Varepris vp ON vare.VareID = vp.Vare_ID
where varepristime in
(select v2.varepristime
from varepris vp1 join varepris2 vp2
on vp1.vare_id = vp2.vare_id
where vp.vare_ID = vp1.vare_ID
and vp1.varepristime >= vp2.varepristime
group by vp2.vare_id
having count(*) < 8)

Det virker godt nok stadig ikke i MySQL, men det er korrekt efter SQL92.

Dermed får vi begge ret: Det kan godt lade sig gøre, men ikke i MySQL.

--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.


Jakob Møbjerg Nielse~ (27-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-09-02 11:30

Kristian Damm Jensen wrote:
> select v2.vare_id
> from varepris1 join varepris2
> on v1.vare_id = v2.vare_id
> where v1.varepristime >= v2.varepristime
> group by v2.vare_id
> having count(*) < 8

Den vil ikke du. Den vælger samtlige rækker hvor der færre end 7 ens
id'er *efter joinet*, og ikke de 7 nyeste. Desuden vil id'er med 4
forskellige priser ikke blive valgt, da der efter joinet vil være
1+2+3+4=10 forskellige rækker med samme id (men det er jo nemt at
rette).

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Kristian Damm Jensen (27-09-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 27-09-02 12:23

"Jakob Møbjerg Nielsen" wrote:
>
> Kristian Damm Jensen wrote:
> > select v2.vare_id
> > from varepris1 join varepris2
> > on v1.vare_id = v2.vare_id
> > where v1.varepristime >= v2.varepristime
> > group by v2.vare_id
> > having count(*) < 8
>
> Den vil ikke du. Den vælger samtlige rækker hvor der færre end 7 ens
> id'er *efter joinet*, og ikke de 7 nyeste.

Jo, hvis jeg har ret i at varepristime siger noget om hvilken forekomst,
der er den nyeste, så vil det virke.

Så finder vi nemlig alle forekomster, hvor der er mindre end syv
forekomster, der er nyere.

> Desuden vil id'er med 4
> forskellige priser ikke blive valgt, da der efter joinet vil være
> 1+2+3+4=10 forskellige rækker med samme id (men det er jo nemt at
> rette).

Du har ret. Der skal både selectes og grupperes på både v2.vare_id og
v2.varetimepris.

--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.


Jakob Møbjerg Nielse~ (28-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 28-09-02 07:08

> > > group by v2.vare_id
> > > having count(*) < 8
> >
> > Den vil ikke du. Den vælger samtlige rækker hvor der færre end 7 ens
> > id'er *efter joinet*, og ikke de 7 nyeste.
>
> Jo, hvis jeg har ret i at varepristime siger noget om hvilken forekomst,
> der er den nyeste, så vil det virke.
>
> Så finder vi nemlig alle forekomster, hvor der er mindre end syv
> forekomster, der er nyere.

Nej. HAVING COUNT(*) < 8, vælger alle de grupper hvor der er færre end 8
rækker. Dvs. hvis der fx er 30 forskellige priser, så vil ingen af dem blive
trukket ud.

> Du har ret. Der skal både selectes og grupperes på både v2.vare_id og
> v2.varetimepris.

Jeg tænkte nu mere på noget andet , nemlig:

HAVING COUNT(*) < 29, da 1+2+3+4+5+6+7 = 28.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Kristian Damm Jensen (30-09-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 30-09-02 12:08

"Jakob Møbjerg Nielsen" wrote:
>
> > > > group by v2.vare_id
> > > > having count(*) < 8
> > >
> > > Den vil ikke du. Den vælger samtlige rækker hvor der færre end 7 ens
> > > id'er *efter joinet*, og ikke de 7 nyeste.
> >
> > Jo, hvis jeg har ret i at varepristime siger noget om hvilken forekomst,
> > der er den nyeste, så vil det virke.
> >
> > Så finder vi nemlig alle forekomster, hvor der er mindre end syv
> > forekomster, der er nyere.
>
> Nej. HAVING COUNT(*) < 8, vælger alle de grupper hvor der er færre end 8
> rækker. Dvs. hvis der fx er 30 forskellige priser, så vil ingen af dem blive
> trukket ud.

Det er vist på tide med et eksempel. Og en gentagelse af forespørgslen i
den endelige form.

select v2.vare_id, v2.pris
from varepris v1 join varepris v2
on v1.vare_id = v2.vare_id
where v1.time >= v2.time
group by v2.vare_id, v2.pris
having count(*) < 8

VAREPRIS

vare_id   pris   time
--------------------
1   1   1:00
1   2   2:00
1   3   3:00
1   4   4:00
1   5   5:00
1   6   6:00
1   7   7:00
1   8   8:00
1   9   9:00

Efter "from" vil vi have et mellemresultat, der ser således ud:

v1.vare_id   v1.pris   v1.time   v2.vare_id   v2.pris   v2.time
---------------------------------------------------------------
1      1   1:00   1      1   1:00
1      1   1:00   1      2   2:00
1      1   1:00   1      3   3:00
1      1   1:00   1      4   4:00
1      1   1:00   1      5   5:00
1      1   1:00   1      6   6:00
1      1   1:00   1      7   7:00
1      1   1:00   1      8   8:00
1      1   1:00   1      9   9:00

1      2   2:00   1      1   1:00
1      2   2:00   1      2   2:00
1      2   2:00   1      3   3:00
1      2   2:00   1      4   4:00
1      2   2:00   1      5   5:00
1      2   2:00   1      6   6:00
1      2   2:00   1      7   7:00
1      2   2:00   1      8   8:00
1      2   2:00   1      9   9:00
....

herefter udføres where-klausulen (v1.varepristime >= v2.varepristime) og
vi får

v1.vare_id   v1.pris   v1.time   v2.vare_id   v2.pris   v2.time
---------------------------------------------------------------
1      1   1:00   1      1   1:00

1      2   2:00   1      1   1:00
1      2   2:00   1      2   2:00

1      3   3:00   1      1   1:00
1      3   3:00   1      2   2:00
1      3   3:00   1      3   3:00
....

"group by v2.vare_id, v2.pris" reducerer dette til (idet jeg lige til
formålet opfinder en notation for antallet af rækker der er indgået i
hver gruppe).

v2.vare_id   v2.pris   (antal)
-------------------------------
1      1   (9)
1      2   (8)
1      3   (7)
1      4   (6)
1      5   (5)
1      6   (4)
1      7   (3)
1      8   (2)
1      9   (1)

"having count(*) < 8" frasorterer lidt og vi ender med

v2.vare_id   v2.pris   
------------------------
1      3   
1      4   
1      5   
1      6   
1      7   
1      8   
1      9   

Altså de syv nyeste forekomster i tabellen for vare_id 1.

Hvor mener du, at jeg regner galt?

--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.



Jakob Møbjerg Nielse~ (30-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 30-09-02 14:47

Kristian Damm Jensen wrote:
> "group by v2.vare_id, v2.pris" reducerer dette til...

Oh, ja... den overså jeg godt nok.

> Hvor mener du, at jeg regner galt?

Ingen steder

Well, jeg synes det vil virke mere logisk at lave en "group by
v2.vare_id, v2.varepristime", men det er jo i småtingsafdelingen, og har
ingen indflydelse på resultatet.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Jakob Møbjerg Nielse~ (30-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 30-09-02 14:52

Jakob Møbjerg Nielsen wrote:
> Well, jeg synes det vil virke mere logisk at lave en "group by
> v2.vare_id, v2.varepristime", men det er jo i småtingsafdelingen, og
> har ingen indflydelse på resultatet.

Det vil faktisk være nødvendigt, da der jo godt kan forekomme samme
pris, på to forskellige tidspunkter.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Ukendt (27-09-2002)
Kommentar
Fra : Ukendt


Dato : 27-09-02 13:09

Hjææælp

Kristian Damm Jensen og Jakob Møbjerg Nielsen

Kristian jeg kan ikke læse dine to poster.. ved ikke hvorfor!

Jakob jeg kan ikk læse din sidste post...

Gider i ikke lige sende den igen ?

Kristian Damm Jensen (27-09-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 27-09-02 14:29

-Martin- wrote:
> Gider i ikke lige sende den igen ?


Jakob Møbjerg Nielsen" wrote:
>
> Kristian Damm Jensen wrote:
> > select v2.vare_id
> > from varepris1 join varepris2
> > on v1.vare_id = v2.vare_id
> > where v1.varepristime >= v2.varepristime
> > group by v2.vare_id
> > having count(*) < 8
>
> Den vil ikke du. Den vælger samtlige rækker hvor der færre end 7 ens
> id'er *efter joinet*, og ikke de 7 nyeste.

Jo, hvis jeg har ret i at varepristime siger noget om hvilken forekomst,
der er den nyeste, så vil det virke.

Så finder vi nemlig alle forekomster, hvor der er mindre end syv
forekomster, der er nyere.

> Desuden vil id'er med 4
> forskellige priser ikke blive valgt, da der efter joinet vil være
> 1+2+3+4=10 forskellige rækker med samme id (men det er jo nemt at
> rette).

Du har ret. Der skal både selectes og grupperes på både v2.vare_id og
v2.varetimepris.

--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.



Jakob Møbjerg Nielse~ (27-09-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 27-09-02 15:18

Kristian Damm Jensen wrote:
>> Den vil ikke du. Den vælger samtlige rækker hvor der færre end 7 ens
>> id'er *efter joinet*, og ikke de 7 nyeste.
>> Desuden vil id'er med 4
>> forskellige priser ikke blive valgt, da der efter joinet vil være
>> 1+2+3+4=10 forskellige rækker med samme id (men det er jo nemt at
>> rette).


Det var så det jeg skrev.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Kristian Damm Jensen (27-09-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 27-09-02 14:30

-Martin- wrote:
> Gider i ikke lige sende den igen ?

"Jakob Møbjerg Nielsen" wrote:
>
> Kristian Damm Jensen wrote:
> > Select * from foo where bar sort by foobar
> > LIMIT 7
> >
> > Gør det ikke, hvad der er behov for?
>
> Jo, men hvordan vil du gøre det her
>
> SELECT * FROM vare INNER JOIN Varepris ON vare.VareID = Varepris.Vare_ID
>
> således at det er de 7 nyeste Varepris.Vare_ID der bliver joinet med for
> hver vare.VareID?

Hm. En udfordring.

Der findes i VarePris en række med navnet VareprisTime. Jeg går ud fra
at den indeholder en form for tidsstempel.

I så fald vil

SELECT * FROM vare INNER JOIN Varepris ON vare.VareID = Varepris.Vare_ID
ORDER BY VareprisTime Desc
LIMIT 7

løse problemet. Eller? Nej, det begrænser det samlede antal.

Okay, så mere ambitiøst

SELECT * FROM vare INNER JOIN Varepris vp1 ON vare.VareID = vp1.Vare_ID
where varepristime
(select varepristime from varepris vp2
where vp1.vare_ID = vp2.vare_ID
ORDER BY VareprisTime Desc
LIMIT 7)

Men MySQL understøtter ikke subselect, og selv hvis de gjorde er det
vist ikke normalt at acceptere order by (endsige limit) i en subselect.

Men hvis vi laver

select v2.vare_id
from varepris1 join varepris2
on v1.vare_id = v2.vare_id
where v1.varepristime >= v2.varepristime
group by v2.vare_id
having count(*) < 8

så finder vi de vare_id fra varepris, hvor der er mindre end 8 rækker
med samme vare_id, der har en nyere varetpristime.

Dette kan så strikkes ind i det første, og så får vi

SELECT * FROM vare INNER JOIN Varepris vp ON vare.VareID = vp.Vare_ID
where varepristime in
(select v2.varepristime
from varepris vp1 join varepris2 vp2
on vp1.vare_id = vp2.vare_id
where vp.vare_ID = vp1.vare_ID
and vp1.varepristime >= vp2.varepristime
group by vp2.vare_id
having count(*) < 8)

Det virker godt nok stadig ikke i MySQL, men det er korrekt efter SQL92.

Dermed får vi begge ret: Det kan godt lade sig gøre, men ikke i MySQL.
--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste