|
| SQL forespørgelse i flere tabeller samtidi~ Fra : Jørgen Olesen |
Dato : 09-10-08 11:18 |
|
Hej,
Jeg har en access database som indeholder tre tabeller.
Tabellerne er bygget fuldkommen identisk op (samme felter/type)
Tabellerne hedder: tab1, tab2, tab3
Hver tabel har felterne: ID, Dato, Tid, Event
Nu vil jeg så lave en forespørgelse som returnere de seneste 5
hændelser uafhængig af hvilken tabel de ligger i, sorteret efter
dato og tid.
Set conDB = Server.CreateObject ("ADODB.Connection")
conDB.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " &
Server.MapPath("eventdb.mdb") &";"
Set rsDB = Server.CreateObject ("ADODB.Recordset")
sqlDB = "SELECT TOP 5 * FROM * ORDER BY dato DESC, Tid DESC"
rsDB.Open sqlDB, conDB
While Not rsDB.EOF
response.write = rsDB.Fields("dato") & " (" &
response.write = rsDB.Fields("tid") & ") : " &
response.write = rsDB.Fields("Event") & "<br>"
rsDB.MoveNext
Wend
Når jeg nu ikke kan bruge "FROM *" eller "FROM tab1, tab2, tab3",
hvordan strikker jeg så en rigtigt SQL forespørgelse sammen?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørgen Olesen (09-10-2008)
| Kommentar Fra : Jørgen Olesen |
Dato : 09-10-08 11:53 |
|
> sqlDB = "SELECT TOP 5 * FROM * ORDER BY dato DESC, Tid DESC"
Er kommet lidt videre.
Hvis jeg bruger nedenstående :
"SELECT TOP 5 * FROM tab1 ORDER BY dato DESC, Tid DESC UNION SELECT
TOP 5 * FROM tab2 ORDER BY dato DESC, Tid DESC UNION SELECT TOP 5 *
FROM tab3 ORDER BY dato DESC, Tid DESC"
Så får jeg en fin liste som indeholder ialt 15 elementer, som er
dato sorteret. Hvordan får jeg kogt den ned til kun at vise 5
elementer?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Stig Johansen (09-10-2008)
| Kommentar Fra : Stig Johansen |
Dato : 09-10-08 15:10 |
|
Jørgen Olesen wrote:
>> sqlDB = "SELECT TOP 5 * FROM * ORDER BY dato DESC, Tid DESC"
>
> Er kommet lidt videre.
> Hvis jeg bruger nedenstående :
>
> "SELECT TOP 5 * FROM tab1 ORDER BY dato DESC, Tid DESC UNION SELECT
> TOP 5 * FROM tab2 ORDER BY dato DESC, Tid DESC UNION SELECT TOP 5 *
> FROM tab3 ORDER BY dato DESC, Tid DESC"
>
> Så får jeg en fin liste som indeholder ialt 15 elementer, som er
> dato sorteret. Hvordan får jeg kogt den ned til kun at vise 5
> elementer?
Nu er jeg ikke Access 'haj', men hvis det var MS SQLServer ville jeg prøve
at pakke den ind i en subselect.
Først lige 2 bemærkninger:
- Jeg ville aldrig bruge SELECT * på en tabel med mindre jeg skulle bruge
samtlige felter. Det er nemt at skrive, men til gengæld udtager man
overskydende felter til ingen nytte. (Performance issue).
- Vær opmærksom på, at en UNION virker (normalt) som en DISTINCT.
Hvis der er sammenfald i værdier, risikerer du ikke at få det hele med.
Så brug UNION ALL.
Men som sagt hvis det var MS SQLServer så:
SELECT TOP 5 * FROM (
SELECT TOP 5 * FROM tab1 ORDER BY dato DESC, Tid DESC
UNION ALL
SELECT TOP 5 * FROM tab2 ORDER BY dato DESC, Tid DESC
UNION ALL
SELECT TOP 5 * FROM tab3 ORDER BY dato DESC, Tid DESC
) ORDER BY dato DESC, Tid DESC
NB: Ej testet.
--
Med venlig hilsen
Stig Johansen
| |
Jørgen Olesen (09-10-2008)
| Kommentar Fra : Jørgen Olesen |
Dato : 09-10-08 19:19 |
|
Stig Johansen wrote in dk.edb.internet.webdesign.serverside.asp:
>
> SELECT TOP 5 * FROM (
> SELECT TOP 5 * FROM tab1 ORDER BY dato DESC, Tid DESC
> UNION ALL
> SELECT TOP 5 * FROM tab2 ORDER BY dato DESC, Tid DESC
> UNION ALL
> SELECT TOP 5 * FROM tab3 ORDER BY dato DESC, Tid DESC
> ) ORDER BY dato DESC, Tid DESC
>
> NB: Ej testet.
Testet og det virker perfekt!
Tak for hjælpen.
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Erling Sørensen (10-10-2008)
| Kommentar Fra : Erling Sørensen |
Dato : 10-10-08 04:32 |
|
"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:48ee10df$0$90266$14726298@news.sunsite.dk...
> - Jeg ville aldrig bruge SELECT * på en tabel med mindre jeg skulle bruge
> samtlige felter. Det er nemt at skrive, men til gengæld udtager man
> overskydende felter til ingen nytte. (Performance issue).
Jeg ville aldrig bruge SELECT * overhovedet.
Hvis man enten med det samme, eller måske først senere, bestemmer sig til at
gemme sit record set i et Array, har man ikke styr på hvilke værdier der
havner på hvilke pladser i Array'et.
mvh
Erling
| |
Jørgen Olesen (10-10-2008)
| Kommentar Fra : Jørgen Olesen |
Dato : 10-10-08 07:44 |
|
Erling Sørensen wrote in dk.edb.internet.webdesign.serverside.asp:
> Jeg ville aldrig bruge SELECT * overhovedet.
> Hvis man enten med det samme, eller måske først senere, bestemmer sig til at
> gemme sit record set i et Array, har man ikke styr på hvilke værdier der
> havner på hvilke pladser i Array'et.
I den aktuelle opgave er det ligegyldigt.
Dataene skal udskrives på skærmen med det samme, så der er ingen grunde til at
indlæse dem i et array. Det er tale om 5 records med hver 4 felter, det er
lige til at overskue.
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
|
|