Realizar consulta de 3 tablas relacionadas

Hola, espero que me ayude, verá:
Tengo 3 tablas:
Tabla Registros: IdRegistro, IdEmpresa, IdCliente,...
Tabla Clientes: IdCliente, IdNombres...
Tabla Empresas: IdEmpresas, IdDescripcion...
La tabla Clientes esta relacionada uno a varios con la tabla Registros
la tabla Empresas esta relacionada uno a varios con la tabla Registros
Tengo un formulario para ingresar los datos para todas las tablas, pero es requerido la información para la tabla Clientes y Registros, pero no tanto así para la tabla Empresas, que puedase grabar datos como no
quisiera que me explique como puedo realizar una consulta sql en la que se muestren todos los registros con los datos de la empresa (si tuviera), clientes y registros incluidos
Quizá es sencillo, pero me hago complicaciones con esto
Muchas gracias de antemano.

1 respuesta

Respuesta
1
Gracias primero por preguntarme no soy un crack pero creo saber lo suficiente para ayudarte.
Lo primero que tienes que tener claro es que en las consultas multitablas se usa un método especial para generar respuesta a la consulta y eso se llama las llamados métodos join. Dentro de ellos hay 3 categorías que es el inner join, el left join(que prioriza ma la tabla de la izquierda) y el right join (que prioriza la tabla más de la derecha), para tu caso creo que usaría el innner join debido a que tenemos múltiples relaciones por lo tanto hay que referenciarlas ademas que inner join toma valores nulos ya que si hiciera left join no tomaría esos valores .
En este caso mostraremos los campos de IDRegistro, IDNombres, IDDescripcion de todas las tablas relacionadas.
Dados los datos que me diste la tabla central o principal seria registros ya que ella depEnde de la tabLA clientes y de empresas para obtener los datos.
entonces en nuestro select colocamos lo siguiente
SELECT Registros.IDRegistro,Clientes.idNombres,Empresas.IDDescripcion
(Acá lo que haces es referenciar las tablas con los campos respectivos donde obtendrás los datos)
FROM Registros, Clientes, Empresas (las tablas)
WHERE  Registros.IdCliente = Clientes.IdCliente AND
              Registros.IDEmpresas = Empresas.IDEmpresas
             (Acá lo que hice nombre las relaciones de las tablas)
Dime lo que te resulto debería mostrarte los 3 campos con la información correspondiente al registro, nombre del cliente y la descripción de la empresa obtenidos de las tres tablas.
Ante todo, gracias por responder. Sí, en efecto me muestra los registros que cumplen esa condición, pero lo que necesito es que me consulte, supongamos, todos los registros que existen en la tabla Registros, es decir, que muestren tanto los datos 'jalados' de la tabla Clientes como de la tabla Empresas (esta última tabla puede dar datos como no a la tabla Registros). Quizá dando un ejemplo de los registros que tengo y de lo que necesito que muestre la consulta:
Tabla: Registros Tabla: Clientes Tabla Empresas
IdRegistro-IdEmpresa-IdCliente-... /   IdClientes-Nombres-... / IdEmpresas-Descripcion-...
0001          -e003       -c001             /   c001        -Carlos J.      / e001           - National SAC
0002                          -c002             /   c002        -Pedro A.      / e002           - Petrobras
0003          -e001       -c003             /   c003        -Juan V.        / e003           - Telefonica
0004                          -c001
Entonces, tengo que en mi tabla Clientes almaceno clientes nuevos, de la misma manera en la tabla Empresas. En mi tabla Registros están presentes los Id de las otras tablas, pero no es necesario el Id de la empresa, pero sí el de clientes. Lo digo pues si necesito facturar gastos para cobrar consultaría Registros, pues casi toda la información y solo necesitaría 'jalar' los otros datos:
Consulta:
IdRegistros - IdEmpresa - Descripcion - IdCliente - Nombres
001             -e003           -Telefonica    -c001        - Carlos J.
002                                                       -c002        - Pedro A.
003             -e001           -National SAC-c003        - Juan V.
004                                                       -c001        - Carlos J.
¿Cuál sería el código sql para generar tal consulta?
No sé si está demás decir que las tablas están en Access, gracias.
Aa bueno solamente a la misma consulta tienes que agregarles los campos que te faltan es decir por ejemplo en el select colocar los campos faltantes de la manera que te explique
por ejemplo ahí faltan colocar en el select Clientes. IdCliente, Empresa. IdEmpresa y con eso te muestra tu consulta, es cuestión que vayas jugando con el código, recuerda que en el select siempre irán los campos que tu quieres mostrar, bueno sin más que decirte creo que esta todo claro de antemano agradecer que hayas confiado en mi, pero como recomendación no todo siempre te lo podre dar, yo por estar trabajando en una empresa donde tengo que hacer una base de datos tuve que aprender solo también, consulte foros pero hay muchas preguntas en que la respuesta la tiene uno mismo ;).
¡Lo he conseguido! Gracias a su información acerca de los métodos join he podido realizar la consulta que deseaba:
SELECT Registros.IdRegistros, Registros.IdEmpresas, Registros.IdClientes, Clientes.IdClientes, Clientes.Nombres, Empresas.IdEmpresas, Empresas.Descripcion
FROM Clientes INNER JOIN (Registros LEFT JOIN Empresas ON Registros.IdEmpresa=Empresas.IdEmpresa) ON Clientes.IdCliente=Registros.IdCliente;
Muchas gracias por la respuesta y los consejos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas