webForumDet fria alternativet

Skillnad emellan UNION och UNION ALL?

Databaser & SQL

10 svar · 240 visningar · startad av KoTTeN

Medlem sedan sep. 20011 722 inlägg
Frågan#1

Hej! Som rubriken lyder, vad är skillnaden?

Medlem sedan dec. 200012 464 inlägg
#2

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

Medlem 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?

Medlem 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

Medlem 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?

Medlem 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;

Medlem 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!

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

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

Medlem sedan sep. 20011 722 inlägg
#11

Tack LarsG, nu fungerar det prima!

283 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
153 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)