2011-01-28 21 views
24

¿Hay alguna compatibilidad con natural join s en las ediciones recientes de Microsoft SQL Server? ¿O hay una buena alternativa para hacer que SQL Server resuelva los predicados que deberían haber estado en las cláusulas ON basadas en la integridad referencial?Unión natural en SQL Server

Respuesta

30

n, y gracias a las estrellas de la suerte

No puedo creer que te gustaría que el motor se adivina la unión para usted

Enlaces relacionados:

Editar, para explicar por qué

  • la unión (si el uso o ON) es clara y explícita
  • yo debería ser capaz de nombrar mis columnas para la entidad almacenada en la tabla, sin tener que preocuparse acerca de lo que una columna se llama en otra tabla, sin NATURAL JOIN efectos secundarios
+12

Solo se trata de adivinar si la implementación se hace mal (nombres de columna). SQL Server tiene una forma precisa de definir referencias, por lo que es lógico que tenga toda la información que necesita para crear un predicado preciso. ¿O estoy equivocado? – grenade

+0

@grenade: ver mi actualización por favor – gbn

+11

Odio el punto 'gracias a la estrella de la suerte' ... pero No es la respuesta correcta ... – mrwaim

5

No me gustaría verlo pronto. A Connect suggestion from 2006 tiene muy poca información que no sea:

Gracias por su comentario. Analizaremos su solicitud de uno de los próximos lanzamientos.

y sólo ha recibido ~ 30 upvotes

+0

BTW, estoy de acuerdo con USING pero no con NATURAL JOIN en esa solicitud ... – gbn

+3

@gbn - natural join, en sí mismo, no es una mala idea. No "adivina" ni infiere en función de claves externas. Simplemente coincide en todas las columnas con nombre idéntico en ambos lados de la unión. Si se está uniendo entre dos tablas que tienen columnas con nombre idéntico que representan cosas diferentes, en general veo eso como un esquema roto; Además, es una función opcional: no penalizará ni cambiará la interpretación de ningún código existente. –

+4

Pensaba más en las columnas de tipo "Insertado por" e "Insertado en". O donde no prefijas una columna de Comentario con el nombre de la tabla para que tengas muchas columnas de Comentario en lugar de Tautological Thing.ThingComment y Stuff.StuffComment – gbn

3

MS SQL no permite conectar natural, ni se unen utilizando(). Debe escribir explícitamente todos los atributos utilizados en la unión.

Si cambia el datamodel, debe cambiar todas las "combinaciones naturales" escritas a mano y asegurarse de que su condición de unión vuelva a estar bien.

Cuestiones relacionadas