Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-04-2005
Mauro.NET Mauro.NET is offline
Miembro
 
Registrado: mar 2005
Posts: 70
Poder: 20
Mauro.NET Va por buen camino
Inner Join del SQL Server

Hola, estoy trabajando en mi empresa con Delphi 6, y estoy usando el motor de base de datos Sybase y estoy empezando a migrar a SQL Server 2000.

En Sybase se puede usar INNER JOIN sin agregarle [ON <condiciones>] y todas las consultas las tengo sin ese ON. En SQL Server veo que debe especificarse dichas condiciones, lo cual me llevaria mucho tiempo la migracion.

Quiero saber si hay forma de hacer las consultas sin el ON en SQL Server, o algo para simplificar un poco la cosa...

Gracias!!
Responder Con Cita
  #2  
Antiguo 04-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
No se si sql server soporte la sintaxis sugerida en el estándar SQL-99 (si no mal recuerdo) para estos casos, que es cross join.

Si lo analizas, verás que el problema está originalmente en Sybase... que no tiene sentido hacer un inner join sin clausula on.

Igual, para efectos de "agilizar" la migración, podes añadirle a todas las consultas una clausula on que siempre devuelva True.

Por ejemplo:

Código SQL [-]
Select *
  from tabla1 t1 inner join tabla2 t2 on 1 = 1;

Es una sentencia válida para el estándar, y estoy seguro que también para sqlserver.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 07-04-2005
Mauro.NET Mauro.NET is offline
Miembro
 
Registrado: mar 2005
Posts: 70
Poder: 20
Mauro.NET Va por buen camino
Como hacer "INNER JOIN" sin incluir "ON"

Estor tratando de migrar una base de datos muy grande en Sybase hacia SQL Server 2000, y el motor del sybase me permite hacer un "INNER JOIN" sin incluir "ON" (este es opcional)

Por ejemplo:

En Sybase puedo hacer (y deseo seguir haciendo)

SELECT * FROM Paises INNER JOIN Provincias INNER JOIN Ciudades

En SQL Server

SELECT * FROM Paises P INNER JOIN Estados E ON P.CodPais=E.CodPais
INNER JOIN Ciudades C ON E.CodEstado=C.CodEstado

me resulta muy poco amigable a la hora de migrar.

Alguien sabe como safar de este problema?
Responder Con Cita
  #4  
Antiguo 07-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No creo que puedas (estoy casi seguro) hacer los JOIN's en SQL sin colocar el ON. Creo que loo vas a tener que hacer "a mano"; En todo caso te podrias hacer un programita al que le pasaras una sentencia SQL y te los añadiera, pero no veo mucho más...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 07-04-2005
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Me causa curiosidad saber como Sybase asume automaticamente cuales campos utilizara en los JOIN

Supongo que es para un caso muy particular, determinando los primary keys y foreign keys, pero eso no forma parte de los estandares SQL/92 y SQL/99
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #6  
Antiguo 07-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo he supuesto que era por los nombres de campo, pero tb tengo curiosidad.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 07-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Que de esto no es de lo que ya estabamos hablando en este otro hilo ?

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 07-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jachguate
Que de esto no es de lo que ya estabamos hablando en este otro hilo?
Cierto.
Los he "juntado" y movido al foro de SQL Server que parece que es donde deben estar.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 09-04-2005
Mauro.NET Mauro.NET is offline
Miembro
 
Registrado: mar 2005
Posts: 70
Poder: 20
Mauro.NET Va por buen camino
eso

Disculpen que me demoré en responder. Afirmo al 100% que en Sybase SQL Anywhere 5.0 se puede hacer INNER JOIN sin agregar "ON". Y no es para ninguna consulta particular, ya que para Sybase te devuelve los mismos registros si le pones el "ON" o no. Tambien la misma regla es para LEFT ó RIGHT OUTER JOIN. Es obvio que tenes que definir previamentelas relaciones entre las tablas. Tengo stored procedures con mas de 100 lineas de codigo SQL y de esta manera es mucho mas legible el codigo (gran ventaja) y en SQL Server no veo forma de hacer esto asi. tendre que hacer un programita que me agregue ese "ON" al codigo. Yo probe el CROSS JOIN del SQL Server y te devuelve (por ejemplo) que todos los empleados trabajan en todos los departamentos.

Saludos.
Responder Con Cita
  #10  
Antiguo 11-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Mauro.NET
...Afirmo al 100% que en Sybase SQL Anywhere 5.0 se puede hacer INNER JOIN sin agregar "ON"...
El problema que le veo a esto es que "no siempre" puedes aplicar ésto, es decir, habrá veces que puedas no ponerlo, pero habrá otras, que estés obligado a hacerlo, y esa diferencia no acaba de convencerme. Por ejemplo no es tan raro el caso en que dos tablas estén relacionadas entre sí por más de una relación:
* Puerto_origen, puerto_destino (relaciones entre viaje-Puerto)
* Población_Residencia, población_nacimiento...
* Empresa, empresa_facturacion
* ...
En estos casos el sistema es incapaz de resolver esa JOIN.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 11-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por Mauro.NET
Afirmo al 100% que en Sybase SQL Anywhere 5.0 se puede hacer INNER JOIN sin agregar "ON".
Esto podria llamarse un Natural Join, aunque ahora no recuerdo si esto es parte de algún estándar o de la jerga de algún motor en partícular. Como ya te han apuntado antes, no siempre es posible resolverlo, y la verdad es la primera vez que escucho de un motor que permita esta sintaxis en un inner join.

Si planeas soportar mas motores en el futuro, es buena idea que diseñes sentencias tan apegadas al estándar como sea posible.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:13:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi