/ Čo to znamená OSN? - sql-server, tsql

Čo to znamená OSN? - sql-server, tsql

Chcel som urobiť vloženie do zväzku a niekto to navrhol:

SELECT x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) UN

Funguje to, ale čo to je UN? Nanešťastie Googling za "t-sql un" nie je veľmi užitočné: str

Poznámka: Zistil som, že to môžete spraviť SELECT x INTO ##temp FROM y UNION ALL SELECT x FROM b ale stále som zvedavý UN.

EDIT: Dobre, tak to je alias, ale prečo je potrebné, aby to fungovalo? Ak ho odstránim, nebude to vykonané.

odpovede:

10 pre odpoveď č. 1

Nie je to kľúčové slovo, je to alias. Akýkoľvek reťazec by sa tu mohol použiť namiesto "UN".

V úplnejšej podobe je to:

SELECT x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) AS UN

@Tomalak je správny. V tomto prípade sa vyžaduje alias. Bez aliasu je chyba:

Msg 102, úroveň 15, stav 1, riadok 2 Nesprávna syntax v blízkosti ")".

Zjednodušil som dotaz trochu a používal databázu AdventureWorks:

SELECT * INTO ##temp
FROM (SELECT * FROM Person.Address)

toto dostane vyššie uvedenú chybu. Na rozdiel od toho:

SELECT * INTO ##temp
FROM Person.Address

funguje to dobre. Alternatívou je

;WITH UN AS
(
SELECT * FROM Person.Address
)
SELECT * INTO ##temp
FROM UN

4 pre odpoveď č. 2

Je to potrebné, pretože ide o odvodenú tabuľku a odvodené tabuľky musia mať názov. Vyhrali ste túto prácu? Nevidím, že potrebujete odvodenú tabuľku.

SELECT x
INTO #Temp
FROM y
UNION ALL
SELECT x
FROM z

Zmenil som sa na pravidelnú temp tabuľku, pretože globálne sú zvyčajne zlým nápadom, pretože ich môže mať iné spojenie. Ak naozaj potrebujete jednu, potom ju použite, inak buďte veľmi opatrní pri použití gloabl temp tabuliek.


3 pre odpoveď № 3

Je to alias v tomto kontexte. Neexistuje žiadny un Príkaz T-SQL. Potom môžete s vašimi poľami odkazovať.

SELECT un.x INTO ##temp
FROM (SELECT x FROM y UNION ALL SELECT x FROM z) UN

1 pre odpoveď č. 4

V tomto prípade, UN je alias pre súbor výsledkov poddotázky ( (SELECT x FROM y UNION ALL SELECT x FROM z)). Môžete nahradiť UN s čímkoľvek, čo sa vám páči, pokiaľ to nebude zamieňať analyzátora.


1 pre odpoveď č. 5

Všetko, čo robí, je alias (SELECT x FROM Y UNION VŠETKY SELECT x FROM z) na "UN"


0 pre odpoveď č. 6

Názov aliasu / korelácie udáva výslednú sadu adočasné meno, aby bolo možné odkazovať na iné miesto v dopyte. Tento príklad ukazuje, že je potrebné, aby alias bol schopný odkazovať na polia v čiastkových dopytoch v klauzulách výberu a spojenia. Ak sub-dotazy nemali aliasy, server by nevedel, aký tabuľku získate z poľa "y". Z aliasov sa vyžaduje, aby rozlíšili dve odlišné úlohy podstránok.

select A.*, B.y
from
(select id, f, k, y from Table1) A
join
(select id, t, y, s from Table2) B
on A.id = B.id