Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Inner Join del SQL Server (https://www.clubdelphi.com/foros/showthread.php?t=20015)

Mauro.NET 03-04-2005 05:33:02

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!!

jachguate 04-04-2005 18:49:11

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.

;)

Mauro.NET 07-04-2005 05:09:38

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?

Neftali [Germán.Estévez] 07-04-2005 09:00:52

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...

__hector 07-04-2005 15:01:16

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

Neftali [Germán.Estévez] 07-04-2005 15:36:19

Yo he supuesto que era por los nombres de campo, pero tb tengo curiosidad.

jachguate 07-04-2005 16:11:53

Que de esto no es de lo que ya estabamos hablando en este otro hilo ?

:confused:

Neftali [Germán.Estévez] 07-04-2005 17:33:33

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.

Mauro.NET 09-04-2005 05:39:33

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.

Neftali [Germán.Estévez] 11-04-2005 09:29:19

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.

jachguate 11-04-2005 16:07:34

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.

;)


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

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