Duda con MySQL
Problemas
Hola, tengo una pregunta sobre MySQL, ojalá algún mononeuron me pueda aclarar un poco al respecto.
Supongamos que tengo N tablas en MySQL, en las cuales hay M campos en común, cual sería la consulta para extraer todos los campos de todas las tablas?
Ejemplo N=4 y M=2
Tablas:
datos(nombre, apellido, sexo, edad, curp)
domicilio (nombre, apellido, calle, numero, cp, ciudad)
dinero (nombre, apellido, ingresos, gastos, ahorro)
puesto (nombre, apellido, empresa, puesto, antiguedad)
Quiero toda la información, excepto claro nombre y apellido, que son las condiciones.
Como sería en general para M y N?
De antemano, gracias!!
--------------------------------------------------------------------------------------------------------------------------------------------
U P D A T E !
Gracias por sus respuestas!
Omití algo -_-, que es el verdadero problema quizá...
Puede darse que una persona tenga mas de un domicilio y más de un puesto, en general el ejemplo no está muy claro, pero el punto es que en las tablas haya más de un registro parael mismo nombre y apellido :-S
Entonces para generar un informe con tooda la información disponible de todas las tablas, es posible hacerse con una sola consulta?
Digo, por ahorrarse el hacer una por cada tabla y por otro lado, las tablas no tienen texto explicito, sino relaciones a otras tablas jajaja, que cosas 8-) por eso la pregunta, porque solo con eso va a ser un desmadre de condiciones :-S
datos(nombre, apellido, id_sexo, edad, curp)
domicilio (nombre, apellido, calle, numero, cp, id_ciudad)
dinero (nombre, apellido, id_ingresos, gastos, ahorro)
puesto (nombre, apellido, id_empresa, id_puesto, id_antiguedad)
Gracias!
Por cierto, no tengo claves primarias, porque esto es una migración de access a MySQL y la persona que hizo el desmadre, ahem, el trabajo anterior, no pensó en esos "detalles" xD
Permalink: http://www.mononeurona.org/entries/view/Teufel/1533
Commentblogs:La primera solución que se me ocurrió, y que dudo que sea la más eficiente:<br />
<br />
select <camposbase(nombre y apellido)>, <camposdiferentestabla1>, <camposdiferentestabla2> ... camposdiferentestablan from <todaslastablas> where tabla1.nombre = tabla2.nombre and tabla1.apellido=tabla2.apellido and tabla1.nombre=tabla3.nombre and tabla1.apellido=tabla3.apellido and ... tabla1.nombre=tablan.nombre and tabla1.nombre=tablan.apellido<br />
<br />
Y ya checando con más calma, posiblemente sea útil usar natural join:<br />
<br />
SELECT * FROM t1 NATURAL JOIN t2 NATURAL JOIN t3 .....; <br />
<br />
Eso empataría los campos comunes, y agregaría los que son diferentes.<br />
<br />
Espero te sirva.<br />
2008-09-03 16:38:24-05
:S ...<br />
<br />
Base de datos: Colección de datos que estan I-N-T--E-R-R-E-L-A-C-I-O-N-A-D-O-S y ordenados en forma INTEGRADA y compartida en donde se evita cualquier R-E-D-U-N-D-A-N-C-I-A.<br />
<br />
Normalización: Proceso de refinamiento de la estructura de la base de datos para mejorar la integridad y velocidad de acceso a los datos.<br />
<br />
Bien, ¿Y tus claves primarias?.Pero vamos a ver se puede hacer algo...<br />
<br />
Creamos una tabla con el listado de todos los campos..Para que no tengas que hacer está pinche consulta a cada rato.<br />
<br />
<br />
Supongo que tu criterio de busqueda es: Nombre y Apellido ¿Sabes la cántidad de personas que tienen el mismo nombre?<br />
<br />
CREATE TABLE temporal<br />
(<br />
nombre varchar(XX);<br />
apellido varchar(XX);<br />
....<br />
...<br />
--Aquí van todos los campos de todas las tablas.<br />
--acuerdate del orden..y respeta las contraints ( Si es que existen :P jaja)<br />
<br />
<br />
);<br />
<br />
<br />
ahora insertamos todos los campos.<br />
<br />
INSERT INTO temporal SELECT datos.nombre,datos.apellido, sexo, edad, curp, calle, numero, cp, ciudad....... FROM datos, domicilio, dinero, puesto WHERE datos.nombre = domicilio.nombre AND dinero.nombre =puesto.nombre AND datos.apellido=domicilio.apellido ......etc etc.<br />
<br />
Y despues tu consulta en la tabla temporal queda así: SELECT * FROM temporal WHERE nombre = 'der_teufel' AND apellidos = 'xxxxxx';<br />
<br />
Claro cuando se actualizan las tablas..ya no sirve.asi que tendrias que escribir siempre una pinch consultisimaaaaa...:P <br />
<br />
Bueno, fue lo único que se me ocurrio para arreglar ese desmadre :D <br />
<br />
2008-09-03 19:03:15-05
Sigue siendo una desmadre aun asi, no tener PK :S es pecado..Pero mi solucion sigue siendo la misma<br />
<br />
SELECT datos.nombre,datos.apellido, sexo, edad, curp, calle, numero, cp, ciudad....... FROM datos, domicilio, dinero, puesto WHERE datos.nombre = "der_teufel" AND dinero.nombre ="der_teufel" AND datos.apellido="apellidoXX"....y sigues para los demas campos.<br />
<br />
2008-09-05 20:20:13-05










