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