Just nu i M3-nätverket
Gå till innehåll

Senaste inlägg


Admini

Rekommendera Poster

Hej

Jag vill göra en sida med "nyheter" vilket är tänkt att hämta det allra senaste inlägget från flera olika tabeller.

Den ska alltså jämföra datumen för de senaste posterna i varje tabell och till slut plocka den nyaste utav dem och skicka den till nyhetssidan.

Alla tabeller har en kolumn som heter datum och innehåller datum för inlägget.

Jag vet inte hur jag ska göra detta, för inner join sammanfogar endast 2 tabeller eller hur?

 

Tack för hjälp

 

 

[inlägget ändrat 2003-01-16 14:47:58 av Admini]

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Inner join sammanfogar så många tabeller du vill. Men för att lösa ditt problem skulle jag göra:

 

SELECT top 1 id,tabellnamn FROM (SELECT id,datum,'t1' as tabellnamn FROM t1
UNION
SELECT id,datum,'t2' as tabellnamn FROM t2
UNION
SELECT id,datum,'t3' as tabellnamn FROM t3
UNION all
SELECT id,datum,'t4' as tabellnamn FROM t4) as tt order by datum desc

 

Då får du ut id-kolumnen och tabellnamn, och kan sedan ta ut datat ur tabellen.

 

 

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

Länk till kommentar
Dela på andra webbplatser

Nej det var mitt fel !

mellanslag kom bort i UNION-satsen

Nu funkar det

[inlägget ändrat 2003-01-16 19:56:26 av Admini]

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Ser att jag har smugit in ett "UNION all" i en av satserna.

"all" kan du ta bort, den är verkningslös.

 

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

[inlägget ändrat 2003-01-16 22:23:57 av Magnus Ahlkvist]

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

inte helt hundra faktiskt, brukar inte använda UNION överhuvudtaget. Tror att det används tillsammans med DISTINCT-klausul i UNION-satser, för att DISTINCT-klausulen ska gälla för hela resultatsetet, inte bara individuellt inom varje SELECT. Men är som sagt inte helt säker. Books OnLine har förmodligen en mer fullständig och mer korrekt beskrivning, men jag har inte BOL installerat på den här datorn.

 

 

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

Länk till kommentar
Dela på andra webbplatser

Union all anger att man inte skall ta bort duplikat från resultatet. I detta fall skulle det vara relevant att ha med då skulle göra frågan effektivare.

 

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Yup, såg det nyss, när jag kollade execution-plan i QA, och ser att samtliga resultatset returneras, och concateneras, och TOP utförs sist. Trodde faktiskt att optimizern var så smart att den i ett tidigare skede hanterade "TOP 1" och inte returnerade så stora resultatset.

När jag meckade med mitt svar försökte jag med:

select top 1 ((select top 1 id,datum,'t1' from tabell1 order by datum desc)

UNION

(select top 1 id,datum,'t2' from tabell2 order by datum desc)) as tt

order by datum desc

 

Men det funkade inte - det går inte att sortera de olika resultaten inom en UNION tydligen (?)

 

 

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...