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

[SOLUCIONADO] resultados duplicados en inner join

Estas en el tema de resultados duplicados en inner join en el foro de Mysql en Foros del Web. Saludos comunidad, tengo 14 tablas que debo relacionar por inner join, pero ya con las tres primeras tengo un dolor de cabeza terrorifico. la estrutura ...
  #1 (permalink)  
Antiguo 05/12/2018, 16:07
 
Fecha de Ingreso: mayo-2006
Mensajes: 86
Antigüedad: 17 años, 9 meses
Puntos: 0
resultados duplicados en inner join

Saludos comunidad,
tengo 14 tablas que debo relacionar por inner join,

pero ya con las tres primeras tengo un dolor de cabeza terrorifico.

la estrutura de las tablas son mas o menos asi.

tabla1 (tiene por ejemplo nombre de personajes su cable id primaria auto incremental, hay mas personajes pero para efectos de la consulta se iso solo con uno)
Código:
------------------------------
id |campo_a| campo_b       |
------------------------------
0  |jack      |el destripador |
------------------------------
tabla2 (tiene caracteristicas del personaje de la tabla 1 segun su id, es una llave fornea y tiene un index, tambien hay similares descripciones para otros personajes)
Código:
----------------------
id |campo_c           |
----------------------
0  |criminal           |
----------------------
0  |descuartizador  |
----------------------
0  |peligroso          |
----------------------
tabla3 (tiene el id de los luhgares donde este personaje iso de las suyas, ¿debo redundar?)
Código:
-------------------------------
id |            campo_d          |
-------------------------------
0  |la calle Osborn             |
-------------------------------
0  |edificio de George Yard |
-------------------------------
0  |la calle Hanbury           |
-------------------------------
0  |Buck's Row                  |
-------------------------------

al realizar el join me arroja estos resultados.

Código:
SELECT 
	A.id, 
	A.campo_a, 
	A.campo_b, 
	B.campo_c, 
	C.campo_d, 
	FROM tabla1 A
	INNER JOIN tabla2 B ON B.id = A.id
	INNER JOIN tabla3 C ON C.id = A.id
Código:
-----------------------------------------------------------------------------------------------
id |campo_a|    campo_b       |         campo_c           |                campo_d              |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |          criminal            |             la calle Osborn         |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |          criminal            |      edificio de George Yard    |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |          criminal            |          la calle Hanbury          |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |          criminal            |              Buck's Row             |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |      descuartizador      |             la calle Osborn         |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |      descuartizador      |      edificio de George Yard    |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |      descuartizador      |          la calle Hanbury          |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |      descuartizador      |              Buck's Row             |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |            peligroso        |             la calle Osborn         |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |            peligroso        |      edificio de George Yard    |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |            peligroso        |          la calle Hanbury          |
-----------------------------------------------------------------------------------------------
0  |    jack   |   el destripador |            peligroso        |              Buck's Row             |
-----------------------------------------------------------------------------------------------

es notable que se esta multiplicando los registros y seran muchos ya que faltan 11 tablas mas.

pregunta:
como hago para que no se repitan los resultados.

PD. he pensado en realizar las consultas en php segun el id de la tabla1, sin envargo son minimo 14 consultas adicionales por cada id, aduciendo que en tabla 1 aya 5000 personajes cada cual con sus caracteristica, lugares y demas es una exorvitante suma de 70000 consultas, y la verdad no me parece saludable para mi pobre mysql.
ya de por si 14 consultas o 45 consultas ya me parece demaciado.

saludos y porfavor ayudenme con este predicamento.
que me trae un poco desorvitado.
  #2 (permalink)  
Antiguo 06/12/2018, 14:31
 
Fecha de Ingreso: mayo-2006
Mensajes: 86
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: resultados duplicados en inner join

Bueno, despues de darme la tarea de revisar la documentacion, me tope con estas dos clausulas que me ayudaron a solucionarlo.

GROUP_CONCAT()
DISTINCT()

Código:
SELECT 
	A.id, 
	A.campo_a, 
	A.campo_b, 
	GROUP_CONCAT(DISTINCT(B.campo_c)) AS campoc, 
	GROUP_CONCAT(DISTINCT(C.campo_d)) AS campod, 
	FROM tabla1 A
	INNER JOIN tabla2 B ON B.id = A.id
	INNER JOIN tabla3 C ON C.id = A.id
de esta forma elimina repetidos y conbina los resultados en una solo campo separando por comas.
ahora es mas sensillo reinterpretarlo con php a traves de algun detector de cadenas como str, strings, strpost o el que les guste mas.
saludos y hasta la proxima comunidad.

Código:
---------------------------------------------------------------------------------------------------------------------------------------------------
id |  campo_a  |      campo_b     |                campoc                |                                campod                                   |
---------------------------------------------------------------------------------------------------------------------------------------------------
0  |    jack   |  el destripador  |  criminal, descuartizador,peligroso  |   la calle Osborn,edificio de George Yard,la calle Hanbury,Buck's Row   |
---------------------------------------------------------------------------------------------------------------------------------------------------

Etiquetas: campo, duplicados, join, registros, resultados, select, tabla
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 11:52.