Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta con varias tablas

Estas en el tema de Consulta con varias tablas en el foro de SQL Server en Foros del Web. Hola, Tengo una tabla "Ofertas" que tiene un campo CodigoTienda, un campo CodigoCliente y un campo TipoCliente entre otros, donde se guardan las ofertas que ...
  #1 (permalink)  
Antiguo 03/08/2012, 09:06
 
Fecha de Ingreso: abril-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 1
Consulta con varias tablas

Hola,

Tengo una tabla "Ofertas" que tiene un campo CodigoTienda, un campo CodigoCliente y un campo TipoCliente entre otros, donde se guardan las ofertas que una determinada tienda oferta a sus clientes. Y una tabla TipClientes con un campo CodigoCliente, otro CodigoTienda y otro TipoCliente que guarda el tipo de cliente que es un usuario para cada tienda. Quiero hacer una consulta que devuelva las ofertas que un cliente puede ver. Es decir, si un cliente es tipo A, podrá ver las oferas orientadas a los clientes tipo A de una tiendas, pero si un cliente es tipo B, la tipo B y así con todos. He probado mil cosas, pero no sé muy bien cómo hacerlo. He probado cosas como,

SELECT *
FROM Ofertas INNER JOIN TipClientes
WHERE (Ofertas.TipoCliente=TipClientes.TipoCliente) AND (Ofertas.CodigoTienda=TipClientes.CodigoTienda) AND (TipClientes.CodigoCliente='el código del cliente que sea')

Pero no funciona :( ¿Alguna idea?

Gracias por la ayuda!!
  #2 (permalink)  
Antiguo 03/08/2012, 09:14
Avatar de calakra  
Fecha de Ingreso: septiembre-2009
Mensajes: 182
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Consulta con varias tablas

Hola, por lo generan despues del join pones las columnas de ralacion

y por cada relacion tienes que hacer un join, aunque hagas dos relaciones a la misma tabla debes de poner el mismo numero de relaciones

ejemplo


SELECT *
FROM Ofertas INNER JOIN TipClientes as cliente ON Ofertas.TipoCliente=cliente.TipoCliente
join TipClientes as tienda on Ofertas.CodigoTienda=tienda .CodigoTienda

WHERE TipClientes.CodigoCliente='el código del cliente que sea'

Aunque viendo bien el query no entiendo bien por que del codigo de la tienda haces relacion a codigo cliente, checa bien tu logica

Saludos, espero haberte ayudado
  #3 (permalink)  
Antiguo 03/08/2012, 09:17
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta con varias tablas

Hola jokings80:

Vayamos por partes... en primer lugar, estás confundiendo el uso del INNER JOIN y las uniones con comas... el JOIN tiene una cláusula ON, que es donde defines las condiciones de igualdad entre las tablas

Código:
FROM  Tabla1
INNER JOIN Tabla2 ON Tabla2.campo = Tabla2.campo

o

FROM Tabla1, Tabla2
WHERE Tabla1.campo = Tabla2.campo
Es preferible utilizar JOIN's, pero en tu caso estás mezclando las dos maneras de hacer las uniones.

Inténtalo así:

Código:
SELECT O.*
FROM Ofertas O
INNER JOIN TipClientes TC ON
  Ofertas.TipoCliente=TipClientes.TipoCliente AND     
  Ofertas.CodigoTienda=TipClientes.CodigoTienda
WHERE
  TipClientes.CodigoCliente='el código del cliente que sea'
Si esto no funciona postea la estructura de tus tablas y pon algunos datos de ejemplo, para poder darte una mejor respuesta.

Saludos
Leo
  #4 (permalink)  
Antiguo 04/08/2012, 02:14
 
Fecha de Ingreso: abril-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 1
Respuesta: Consulta con varias tablas

Hola,

Muchas gracias por responder. Efectivamente el problema era que no especificaba la relación :( Funcionó perfectamente :D

Una pregunta más. ¿Es posible usar LIKE con el nombre de una columna? Por ejemplo Oferta.TipoCliente LIKE %TipCliente.TipoCliente%. El problema está en que si uso comillas simple no lo reconoce. Imagino que lo trata como una cadena. Y si no las uso, falla.

Muchas gracias de nuevo!!
  #5 (permalink)  
Antiguo 06/08/2012, 09:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta con varias tablas

Hola de nuevo jokings80:

Mucho ojo, estás haciendo una nueva pregunta en un post abierto en donde lo que preguntaste originalmente no tiene absolutamente nada que ver con lo que preguntas ahora. si la pregunta original ya fue resuelta entonces no tiene caso seguir publicando mensajes, si tienes nuevas dudas entonces abres un nuevo post y lanzas la nueva pregunta. mucho ojo para la próxima.

No me queda claro qué es lo que estás tratando de hacer con esto:

Código:
Oferta.TipoCliente LIKE %TipCliente.TipoCliente%.
En primer lugar pues te abras dado cuenta que lo que quieres hacer es sintácticamente imposible... a reserva de que nos digas qué es lo que quieres hacer, poniendo algunos datos de ejemplo, podrías usar la función CONCAT para concatenar al contenido del campo TipCliente.TipoCliente los caracteres comodín, es decir, algo como esto:

Código:
Oferta.TipoCliente LIKE CONCAT('%', TipCliente.TipoCliente, '%')
Haz la prueba y nos comentas.

Finalmente, veo que no solo duplicaste tu pregunta en varios subforos de "Foros del Web", sino que también lo hiciste en algunas otras "Web's para Programadores". Así como te tomaste el tiempo de copiar y pegar tu pregunta en todas estas páginas, deberías tomar el tiempo de cerrar los temas en cada uno de estos foros no crees???

Saludos
Leo.
  #6 (permalink)  
Antiguo 06/08/2012, 09:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta con varias tablas

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola de nuevo jokings80:

Mucho ojo, estás haciendo una nueva pregunta en un post abierto en donde lo que preguntaste originalmente no tiene absolutamente nada que ver con lo que preguntas ahora. si la pregunta original ya fue resuelta entonces no tiene caso seguir publicando mensajes, si tienes nuevas dudas entonces abres un nuevo post y lanzas la nueva pregunta. mucho ojo para la próxima.

No me queda claro qué es lo que estás tratando de hacer con esto:

Código:
Oferta.TipoCliente LIKE %TipCliente.TipoCliente%.
En primer lugar pues te abras dado cuenta que lo que quieres hacer es sintácticamente imposible... a reserva de que nos digas qué es lo que quieres hacer, poniendo algunos datos de ejemplo, podrías usar la función CONCAT para concatenar al contenido del campo TipCliente.TipoCliente los caracteres comodín, es decir, algo como esto:

Código:
Oferta.TipoCliente LIKE CONCAT('%', TipCliente.TipoCliente, '%')
Haz la prueba y nos comentas.

Finalmente, veo que no solo duplicaste tu pregunta en varios subforos de "Foros del Web", sino que también lo hiciste en algunas otras "Web's para Programadores". Así como te tomaste el tiempo de copiar y pegar tu pregunta en todas estas páginas, deberías tomar el tiempo de cerrar los temas en cada uno de estos foros no crees???

Saludos
Leo.
Deja de cerrar los posts, de investigar un poco :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 08/08/2012, 05:07
 
Fecha de Ingreso: abril-2007
Mensajes: 51
Antigüedad: 17 años
Puntos: 1
Respuesta: Consulta con varias tablas

Hola!!

Muchas gracias por responder. Efectivamente, usando LIKE CONCAT('%', TipCliente.TipoCliente, '%') funciona.

Gracias!!

Etiquetas: select, tabla, tablas, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:17.