Just nu i M3-nätverket
Jump to content

Senaste inlägg


Admini

Recommended Posts

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]

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...