/ / ¿Qué significa esta ONU? - sql-server, tsql

¿Qué significa esta ONU? - sql-server, tsql

Quería hacer un inserto con un sindicato, y alguien sugirió esto:

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

Funciona, pero ¿cuál es el UN? Desafortunadamente, buscar en Google para "t-sql un" no es muy útil: p

Nota: Descubrí que puedes hacer SELECT x INTO ##temp FROM y UNION ALL SELECT x FROM b pero sigo sintiendo curiosidad por UN.

EDIT: Ok, entonces es un alias, pero ¿por qué es necesario hacer que esto funcione? Si lo elimino, no se ejecutará.

Respuestas

10 por respuesta № 1

No es una palabra clave. Es un alias. Cualquier cadena podría haber sido usada allí en lugar de "UN".

En forma más completa, es:

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

@Tomalak es correcto. En este caso, se requiere el alias. Sin el alias, el error es:

Mensaje 102, Nivel 15, Estado 1, Línea 2 Sintaxis incorrecta cerca ")".

Simplifiqué un poco la consulta y utilicé la base de datos AdventureWorks:

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

Esto recibe el error anterior. A diferencia de:

SELECT * INTO ##temp
FROM Person.Address

funciona bien Una alternativa es

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

4 para la respuesta № 2

Es obligatorio porque esta es una tabla derivada y las tablas derivadas deben tener un nombre. ¿No funciona? No veo que necesite la tabla derivada.

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

Cambié a una tabla temporal regular, ya que las globales suelen ser una mala idea ya que otras conexiones pueden afectarlas. Si realmente necesita uno, entonces utilícelo, de lo contrario tenga mucho cuidado de usar las tablas temporales de gloabl.


3 para la respuesta № 3

Es un alias en este contexto. No hay un Comando T-SQL. A continuación, puede hacer referencia a sus campos con eso.

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

1 para la respuesta № 4

En este caso, UN es el alias para el conjunto de resultados de la subconsulta (la (SELECT x FROM y UNION ALL SELECT x FROM z)). Puede reemplazar UN con lo que quieras siempre y cuando no se confunda el analizador.


1 para la respuesta № 5

Todo lo que hace es alias el (SELECCIONE x DE y UNION TODO SELECCIONE x DE z) a "UN"


0 para la respuesta № 6

Un alias / nombre de correlación da al conjunto de resultados unnombre temporal para que pueda ser referenciado en otra parte de la consulta. Este ejemplo muestra que se requiere que el alias sea capaz de hacer referencia a los campos en las consultas secundarias en las cláusulas de selección y combinación. Si las subconsultas no tuvieran alias, el servidor no sabría de qué tabla obtener el campo "y". Los alias son necesarios para distinguir los dos roles diferentes de las subconsultas.

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