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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top