Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Where con los resultados de otra tabla

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Where con los resultados de otra tabla Responder citando

Buenas a todos,

Mi preguntita es la siguiente, tengo los resultados en una Query de por ejemplo clientes, tengo los IDCliente, pueden ser 1, 10 o un monton.

La cuestion es que quiero hacer un where en otra tabla que por ejemplo seria ventas con el where de los idcliente, pero claro no quiero poner en la consulta uno a uno los clientes que me salgan en la otra consulta, se os ocurre una manera mejor.

Gracias por todos.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Al parecer lo que requieres es un relación maestro detalle en tus tablas, ultimamente he estado usando Firebird, pero al parecer a los componentes xxxQuery, no les importa de donde vengan los datos, solo deben estar bien configurados.

1.- A la tabla donde tienes los clientes le llamare qClientes y a la tabla donde deseas ver las "ventas" de los clientes le llamare qVentas

2.- La tabla qClientes imágino que debe tener algo como esto "Select * From tuTablaClientes", esto hace que en esta tabla aparezcan todos los clientes.

3.- Bien en la tabla qVentas, debes realizar lo siguiente cambiando algunas de las propiedades
DataSource: es el DataSet de la tabla qClientes
SelectSQL: aqui debes generar una sentencia Select de la siguiente manera
"Select * From TuTablaVenta Where idCliente = :IdCli"
idCliente <- es el campo de tu Tabla TuTablaVentas
IdCli <- es el campo ID de la tabla qClientes

Bien lo que estamos haciendo es, que cada vez que te muevas en la tabla qClientes los registros de la tabla qVentas se cambian automaticamente generando una relación Maestro - Detalle.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Si lo que quieres no es exactamente una relacion Maestro-Detalle como la que te explica Cesar, y buscas una forma de sacar un recordset con todos los registros de varios vendedores, yo utilizaría:
Código:
int nl = 0;
String cRs;
//Bucle donde sacas los clientes que necesitas (la sintasis no es exacta)
while (!RsCli->Eof) {
   if (nl++ >0) cRs += ",";  //si el codigo es numerico, si es texto necisitarás "','"
   cRs += RsCli->Field .... ;
   RsCli->Next();
}

// Una ves en cRs tienes todos los clientes, en el query de ventas consultas algo como:
 = "Select .... From Ventas Where idcliente IN (" + cRs +")"; //Recuerda completar apostrofe si no es numerico.



Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cesar,

No es eso exactamente lo que necesito, para que te hagas una idea tengo una tabla que se llama Ventas y otra que se llama Clientes, imaginemos que de la tabla clientes tengo 100 clientes pero solo saco 5 de ellos que cumplen ciertas condiciones y quiero presentar un listado de todas las ventas de esos 5 clientes pero no del resto.

Ahora mismo lo que hago es en el Where de las ventas poner idCliente="1" or idCliente="2" etc...

El problema es que tengo que ir uno a uno por los clientes y construir la cadena SQL, cuando imagino que debe de haber una forma más fácil de hacerlo no?

Espero haberme explicado bien.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Pues con la operación que estoy indicandote, no importa si sacas 1 o sacas 100, lo que interesa es que en la tabla ventas, siempre vas a tener las ventas dependiendo del cliente que elijas, en tu tabla Clientes.

Si en la construcción de tu tabla Clientes, solo hay 2, pues solo las ventas de esos 2 van aparecern en la otra tabla.

Saludos, analiza la sentencia y veras que da resultado.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Cesar,

Quizás no te entiendo bien, con lo que tu me estas diciendo saldrían solo las ventas del cliente seleccionado no? como un maestro/detalle normal, pero lo que yo quiero es que salgan todas las ventas de todos los clientes que tenga en la Query de clientes a la vez.

Es algo parecido a lo que dice Juanma, que es basicamente lo que yo estoy haciendo, pero pensaba que quizas dentro de la misma Query podria pedir los clientes que quiero con su condicion y de su resultado las ventas que tengan todos esos clientes.

No se si me explico bien.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

A ver algo así:
Código:
SELECT A.Ventas, B.IdCliente, B.Nombre
FROM Ventas A, Clientes B
WHERE A.IdCliente = B.IdCliente AND B.IdCliente = ...

Montas un query con las dos tablas, seleccionando los campos de las tablas que te interesen y en el WHERE pones las condiciones que te interesen para los clientes y AÑADES que la identificación del cliente esté en ambas tablas.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

En el último de los casos, puedes hacer lo que te indica Ángel, y aunando un poco mas puedes convertir la Sentencia Select por un Create View para crear una vista.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Hola carlos, es esto lo que buscas?
Código:
SELECT * FROM ventas where ref_cliente IN(SELECT id_cliente FROM clientes WHERE nombre='juan');

saludos tor.
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.