webForumDet fria alternativet

Skillnad emellan UNION och UNION ALL?

Databaser & SQLur Databashanterare & SQL

10 svar · 238 visningar · startad av KoTTeN

KoTTeNMedlem sedan sep. 20011 722 inlägg
#1

Hej! Som rubriken lyder, vad är skillnaden?

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Union - utan (eventuella) duplikat
Union all - med (eventuella) duplikat

KoTTeNMedlem sedan sep. 20011 722 inlägg
#3

Efter en snabb genomgång i ordboken under d så förstår jag någolunda :). Men vad är det som räknas som duplikat? Är det när samtliga fält man hämtar data från har samma innehåll?

aasahMedlem sedan mars 20034 471 inlägg
#4

Bör röra sig om två rader med samma innehåll. Ex:
A
namn lön chef
Anna 20 Karin
Björn 21 Karin

B
namn lön chef
Dan 20 Karin
Eva 17 Joel

SELECT lön, chef FROM A
UNION
SELECT lön, chef FROM B

ger

lön chef
20 Karin
21 Karin
17 Joel

medan
SELECT lön, chef FROM A
UNION ALL
SELECT lön, chef FROM B

ger

lön chef
20 Karin
21 Karin
20 Karin
17 Joel

KoTTeNMedlem sedan sep. 20011 722 inlägg
#5

Ok, då är jag med på noterna!
Men yterligare en fråga: Säg att jag har samma databasstruktur som ovan med samma innehåll. Det jag vill är att hämta datan ur båda tabellerna och sen sortera de efter lön, exempelvis

SELECT lön, chef FROM A ORDER BY lön
UNION ALL
SELECT lön, chef FROM B

Men får inte detta att fungera, får det sorterat efter positionen i databasen. Hur löser jag detta?

aasahMedlem sedan mars 20034 471 inlägg
#6

Problemet - med det du skrev - är att först får du ut all relevant info ur A, därefter all relevant info from B. Men det du vill är att sortera hela klabbet tillsammans antar jag. Och då måste du på något sätt se till att du tittar på unionens alla rader innan du sorterar.

Det här är i alla fall ett sätt (möjligt att det går på andra sätt också).

CREATE VIEW C AS
SELECT lön, chef FROM A
UNION ALL
SELECT lön, chef FROM B;

SELECT * FROM C
ORDER BY lön;

KoTTeNMedlem sedan sep. 20011 722 inlägg
#7

Ok, blir till att testa det imorgon efter några timmars skön sömn :)
Men ett stort tack till er, aasah och LarsG för hjälpen!

LarsGMedlem sedan dec. 200012 464 inlägg
#8
SELECT lön, chef FROM A 
UNION ALL
SELECT lön, chef FROM B
ORDER BY lön
KoTTeNMedlem sedan sep. 20011 722 inlägg
#9

Får tyvärr följande flemedelande när jag testar larsGs kod:

Microsoft JET Database Engine (0x80004005)
ORDER BY-uttrycket (KatUndID) innehåller fält som inte hämtas med frågan. Endast fält som hämtas med första frågan kan ingå i ORDER BY-uttrycket.

Kan det bero på att det fält jag vill sortera efter har olika namn i de totalt tre olika tabellerna jag hämtar ifrån, till skillnad från exempelt här ovan då båda heter lön? Dess innehåll är självklart av samma typ, tal närmare bestämt.

LarsGMedlem sedan dec. 200012 464 inlägg
#10

Namnen i resultatet bestäms av namnen i den första frågan så det dessa namn du kan använda i order by.

KoTTeNMedlem sedan sep. 20011 722 inlägg
#11

Tack LarsG, nu fungerar det prima!

132 ms totalt · 3 externa anrop · v20260731065814-full.b2af184d
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)