TSQL combinación izquierda con varias filas de la derecha
-
12-09-2019 - |
Pregunta
Al realizar una combinación izquierda en TSQL (MSSQL SERVER) ¿hay alguna garantía de la fila que volverá con su consulta si hay múltiples filas de la derecha?
Estoy tratando de usar esto para explotar un ordenamiento en la tabla de la derecha.
so
Select ColA, ColB, ColC
from T
Left Outer Join
(Select ColA, ColB, ColC
from T--CLARIFIED, this is a self join.
Order by TopColumn Desc) AS OrderedT(ColA, ColB, ColC)
On T.ColA = OrderedT.ColA
Yo esperaría para recuperar toda la Cola en la tabla, y toda la primera fila del conjunto de resultados de la cola por mi izquierda unirse a la base de mi pedido.
¿Hay alguna garantía hecha en esta lengua o por el servidor?
Solución
Creo que necesita este ...
select T.ColA, T.ColB, T.ColC
from T
inner join
(select ColA, max(TopColumn) MaxTopColumn
from T
group by ColA) OrderedTable
on T.ColA = OrderedTable.ColA and T.TopColumn = OrderedTable.MaxTopColumn
consulta Bastante común para las tablas versionadas, requiere una combinación interna a una consulta máx.
El nombre de la tabla "Tabla" no facilitan las cosas, he renombré T.
Otros consejos
No es tan simple. La LEFT JOIN devuelve todas las filas derechas coincidentes. Así que la pregunta sobre la garantía aquí no es realmente relevante. Habría que hacer algo con una subconsulta para obtener la única fila que necesita, usando TOP 1 en la subconsulta.
Un LEFT JOIN devuelve todas las filas de la mano izquierda que satisfacen los criterios de cualquier lugar, independientemente de si hay una fila coincidente a la derecha (en la llave (s) se unen). Las columnas de la tabla de la derecha serán devueltos como NULL, donde no hay ninguna coincidencia en unirse a la clave.