Montar query

13/12/2004 - 13:42 por Joan Ibáñez | Informe spam
Buenos dias! Estoy intentando montar un query, y no encuentro la solución:

Select T1.Campo1, T2.Campo3, T3.Campo5

From Tabla1 T1 Inner Join Tabla2 T2
On T1.CampoX = T2.CampoX

Inner Join T2.Campo8 T3
On T1.CampoY = T3.CampoY

Where ...

El problema es que en el segundo 'Inner Join' la tabla la quiero obtener de
uno de los campos de la Tabla2.
Tal como esta no funciona ¿Como puedo hacerlo?¿Se puede?

El query lo almaceno en una variable 'varchar' para luego lanzarlo con exec:

exec(@query)

Un saludo.

Preguntas similare

Leer las respuestas

#6 Javier Loria
13/12/2004 - 16:25 | Informe spam
Hola:
Este tipo de diseno no es "relacional" y por ende no hay soporte en
T-SQL para hacer JOIN de esta forma. Me parece que ni con SQL Dinamico vas a
poder solucionar esto. Probablemente con un cursor si podrias.
Podrias contarnos mas de las tablas y lo que realmente modelan? Tal vez
podemos ayudarte en ese sentido.
Por otra parte si las tablas con pocas y los datos contenido en ellas no
es demasiado podrias hacer un union all, de la siguiente forma:
SELECT
FROM Tabla1 AS T1
INNER JOIN Tabla2 AS T2
ON T1.X=T2.X
INNER JOIN (
SELECT 'TablaA' AS Tabla,
FROM TablaA
UNION ALL
SELECT 'TablaB' AS Tabla,
FROM TablaB
UNION ALL
SELECT 'TablaC' AS Tabla,
FROM TablaC
) AS TU
ON T2.X=TU.Tabla
WHERE
Muchas filas en las tablas hacer la consulta muy lenta.
Cuentanos de las tablas, para ves si te podemos ayudar en ese sentido.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Joan Ibáñez" wrote in message
news:#
Lo que quiero hacer, es que el segundo inner join sea con la tabla cuyo
nombre esta en el campo 'campo8' de la tabla 'tabla2', ¿me explico? porque
en funcion del registro que se este tratando, he de hacer el 'inner join'
con diferentes tablas.

Un saludo.


"Maxi" escribió en el mensaje
news:%
> Hola, para hacer eso tenes que usar Tablas derivadas
>
>
> Select T1.Campo1, T2.Campo3, T3.Campo5
>
> From Tabla1 T1 Inner Join Tabla2 T2
> On T1.CampoX = T2.CampoX
>
> Inner Join (select Campo8,campoy from tabla2) T3
> On T1.CampoY = T3.CampoY
>
> Where ...
>
>
> pd: no uses SQL-dinamico ya que es una tecnica muy insegura y de bajo
> rendimiento
>
>
> Salu2
> Maxi
>
>
> "Joan Ibáñez" escribió en el mensaje
> news:
> > Buenos dias! Estoy intentando montar un query, y no encuentro la
solución:
> >
> > Select T1.Campo1, T2.Campo3, T3.Campo5
> >
> > From Tabla1 T1 Inner Join Tabla2 T2
> > On T1.CampoX = T2.CampoX
> >
> > Inner Join T2.Campo8 T3
> > On T1.CampoY = T3.CampoY
> >
> > Where ...
> >
> > El problema es que en el segundo 'Inner Join' la tabla la quiero


obtener
> > de
> > uno de los campos de la Tabla2.
> > Tal como esta no funciona ¿Como puedo hacerlo?¿Se puede?
> >
> > El query lo almaceno en una variable 'varchar' para luego lanzarlo con
> > exec:
> >
> > exec(@query)
> >
> > Un saludo.
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Joan Ibáñez
13/12/2004 - 16:48 | Informe spam
Estoy realizando una consulta de pólizas de seguros, y cuando muestro la
grilla con las pólizas obtenidas, he de mostrar la descripción(del riesgo)
de cada una de ellas, almacenado en diferentes tablas segun el producto
(hogar, comunidades, pymes,buques, etc...). Tenemos una tabla de
configuracion de producto donde indica en que tabla se guarda el riesgo de
cada producto (ya que son diferentes).
Tenemos mas de 10 productos, y si uso 'Union All' tendre que ir tocando el
codigo cada vez q se añadan productos.

De todos modos muchas gracias! ;-)


"Javier Loria" escribió en el mensaje
news:
Hola:
Este tipo de diseno no es "relacional" y por ende no hay soporte en
T-SQL para hacer JOIN de esta forma. Me parece que ni con SQL Dinamico vas


a
poder solucionar esto. Probablemente con un cursor si podrias.
Podrias contarnos mas de las tablas y lo que realmente modelan? Tal


vez
podemos ayudarte en ese sentido.
Por otra parte si las tablas con pocas y los datos contenido en ellas


no
es demasiado podrias hacer un union all, de la siguiente forma:
> SELECT
FROM Tabla1 AS T1
INNER JOIN Tabla2 AS T2
ON T1.X=T2.X
INNER JOIN (
SELECT 'TablaA' AS Tabla,
FROM TablaA
UNION ALL
SELECT 'TablaB' AS Tabla,
FROM TablaB
UNION ALL
SELECT 'TablaC' AS Tabla,
FROM TablaC
) AS TU
ON T2.X=TU.Tabla
WHERE
> Muchas filas en las tablas hacer la consulta muy lenta.
Cuentanos de las tablas, para ves si te podemos ayudar en ese sentido.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Joan Ibáñez" wrote in message
news:#
> Lo que quiero hacer, es que el segundo inner join sea con la tabla cuyo
> nombre esta en el campo 'campo8' de la tabla 'tabla2', ¿me explico?


porque
> en funcion del registro que se este tratando, he de hacer el 'inner


join'
> con diferentes tablas.
>
> Un saludo.
>
>
> "Maxi" escribió en el mensaje
> news:%
> > Hola, para hacer eso tenes que usar Tablas derivadas
> >
> >
> > Select T1.Campo1, T2.Campo3, T3.Campo5
> >
> > From Tabla1 T1 Inner Join Tabla2 T2
> > On T1.CampoX = T2.CampoX
> >
> > Inner Join (select Campo8,campoy from tabla2) T3
> > On T1.CampoY = T3.CampoY
> >
> > Where ...
> >
> >
> > pd: no uses SQL-dinamico ya que es una tecnica muy insegura y de bajo
> > rendimiento
> >
> >
> > Salu2
> > Maxi
> >
> >
> > "Joan Ibáñez" escribió en el mensaje
> > news:
> > > Buenos dias! Estoy intentando montar un query, y no encuentro la
> solución:
> > >
> > > Select T1.Campo1, T2.Campo3, T3.Campo5
> > >
> > > From Tabla1 T1 Inner Join Tabla2 T2
> > > On T1.CampoX = T2.CampoX
> > >
> > > Inner Join T2.Campo8 T3
> > > On T1.CampoY = T3.CampoY
> > >
> > > Where ...
> > >
> > > El problema es que en el segundo 'Inner Join' la tabla la quiero
obtener
> > > de
> > > uno de los campos de la Tabla2.
> > > Tal como esta no funciona ¿Como puedo hacerlo?¿Se puede?
> > >
> > > El query lo almaceno en una variable 'varchar' para luego lanzarlo


con
> > > exec:
> > >
> > > exec(@query)
> > >
> > > Un saludo.
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#8 ulises
13/12/2004 - 17:15 | Informe spam
En ese panorama me parece más cómodo leer en consultas
adicionales los nombres de los productos, en todo caso si
deseas todavía manejarlo en el servidor, podrías :

1) Crear una vista con los nombres de los productos y en el
procedimiento de creación de productos incluir la lógica de
volver a crear la vista, pero le veo problemas si el
número de productos llega a ser grande

2) En lugar de una vista crear una tabla que contenga: los
productos, riesgos y su descripción y que sea actualizado
por un triger creado en cada una de esas tablas de productos.

Saludos,
Ulises

Estoy realizando una consulta de pólizas de seguros, y


cuando muestro la
grilla con las pólizas obtenidas, he de mostrar la


descripción(del riesgo)
de cada una de ellas, almacenado en diferentes tablas


segun el producto
(hogar, comunidades, pymes,buques, etc...). Tenemos una


tabla de
configuracion de producto donde indica en que tabla se


guarda el riesgo de
cada producto (ya que son diferentes).
Tenemos mas de 10 productos, y si uso 'Union All' tendre


que ir tocando el
codigo cada vez q se añadan productos.

De todos modos muchas gracias! ;-)
Respuesta Responder a este mensaje
#9 Javier Loria
13/12/2004 - 18:14 | Informe spam
Hola:
Sin que ninguna de las sugerencias que te voy a dar me convenza al 100%,
me parece que tienes algunas alternativas:
a) Tabla "Central" que representa el Poliza y tiene la informacion que
se repite en todas las otras tablas, y una tabla adicional para cada uno de
los productos con sus columnas especificas. Esta es la mas SQL, con un toque
de OOP.
b) Tabla Central que representa la Poliza y tiene la informacion que se
repite en todos los productos y una unica tabla adicional con los atributos
adicionales en formato (PK, Atributo, Valor). Se presentan algunos problemas
con tipos, que puedes solucionar con varias columnas o sin validacion en un
VARCHAR(). Esta tiene el problema de mezclar MetaData y Data.
El diseno que tienes ahora me parece te va a perseguir hasta enterrarte,
o lo matas o el va a terminar matandote :D
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Joan Ibáñez" wrote in message
news:
Estoy realizando una consulta de pólizas de seguros, y cuando muestro la
grilla con las pólizas obtenidas, he de mostrar la descripción(del riesgo)
de cada una de ellas, almacenado en diferentes tablas segun el producto
(hogar, comunidades, pymes,buques, etc...). Tenemos una tabla de
configuracion de producto donde indica en que tabla se guarda el riesgo de
cada producto (ya que son diferentes).
Tenemos mas de 10 productos, y si uso 'Union All' tendre que ir tocando el
codigo cada vez q se añadan productos.

De todos modos muchas gracias! ;-)


"Javier Loria" escribió en el mensaje
news:
> Hola:
> Este tipo de diseno no es "relacional" y por ende no hay soporte en
> T-SQL para hacer JOIN de esta forma. Me parece que ni con SQL Dinamico


vas
a
> poder solucionar esto. Probablemente con un cursor si podrias.
> Podrias contarnos mas de las tablas y lo que realmente modelan? Tal
vez
> podemos ayudarte en ese sentido.
> Por otra parte si las tablas con pocas y los datos contenido en


ellas
no
> es demasiado podrias hacer un union all, de la siguiente forma:
> > > SELECT
> FROM Tabla1 AS T1
> INNER JOIN Tabla2 AS T2
> ON T1.X=T2.X
> INNER JOIN (
> SELECT 'TablaA' AS Tabla,
> FROM TablaA
> UNION ALL
> SELECT 'TablaB' AS Tabla,
> FROM TablaB
> UNION ALL
> SELECT 'TablaC' AS Tabla,
> FROM TablaC
> ) AS TU
> ON T2.X=TU.Tabla
> WHERE
> > > Muchas filas en las tablas hacer la consulta muy lenta.
> Cuentanos de las tablas, para ves si te podemos ayudar en ese


sentido.
> Saludos,
>
>
> Javier Loria
> Costa Rica
> Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
> que pueda ser copiado y pegado al Query Analizer.
> La version de SQL y Service Pack tambien ayuda
>
> "Joan Ibáñez" wrote in message
> news:#
> > Lo que quiero hacer, es que el segundo inner join sea con la tabla


cuyo
> > nombre esta en el campo 'campo8' de la tabla 'tabla2', ¿me explico?
porque
> > en funcion del registro que se este tratando, he de hacer el 'inner
join'
> > con diferentes tablas.
> >
> > Un saludo.
> >
> >
> > "Maxi" escribió en el mensaje
> > news:%
> > > Hola, para hacer eso tenes que usar Tablas derivadas
> > >
> > >
> > > Select T1.Campo1, T2.Campo3, T3.Campo5
> > >
> > > From Tabla1 T1 Inner Join Tabla2 T2
> > > On T1.CampoX = T2.CampoX
> > >
> > > Inner Join (select Campo8,campoy from tabla2) T3
> > > On T1.CampoY = T3.CampoY
> > >
> > > Where ...
> > >
> > >
> > > pd: no uses SQL-dinamico ya que es una tecnica muy insegura y de


bajo
> > > rendimiento
> > >
> > >
> > > Salu2
> > > Maxi
> > >
> > >
> > > "Joan Ibáñez" escribió en el mensaje
> > > news:
> > > > Buenos dias! Estoy intentando montar un query, y no encuentro la
> > solución:
> > > >
> > > > Select T1.Campo1, T2.Campo3, T3.Campo5
> > > >
> > > > From Tabla1 T1 Inner Join Tabla2 T2
> > > > On T1.CampoX = T2.CampoX
> > > >
> > > > Inner Join T2.Campo8 T3
> > > > On T1.CampoY = T3.CampoY
> > > >
> > > > Where ...
> > > >
> > > > El problema es que en el segundo 'Inner Join' la tabla la quiero
> obtener
> > > > de
> > > > uno de los campos de la Tabla2.
> > > > Tal como esta no funciona ¿Como puedo hacerlo?¿Se puede?
> > > >
> > > > El query lo almaceno en una variable 'varchar' para luego lanzarlo
con
> > > > exec:
> > > >
> > > > exec(@query)
> > > >
> > > > Un saludo.
> > > >
> > > >
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida