Hej! Som rubriken lyder, vad är skillnaden?
Skillnad emellan UNION och UNION ALL?
Databaser & SQLur Databashanterare & SQL
10 svar · 238 visningar · startad av KoTTeN
Union - utan (eventuella) duplikat
Union all - med (eventuella) duplikat
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?
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
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?
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;
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!
SELECT lön, chef FROM A
UNION ALL
SELECT lön, chef FROM B
ORDER BY lön
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.
Namnen i resultatet bestäms av namnen i den första frågan så det dessa namn du kan använda i order by.
Tack LarsG, nu fungerar det prima!