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

JOIN dos tablas mas COUNT en una tercera

Estas en el tema de JOIN dos tablas mas COUNT en una tercera en el foro de Mysql en Foros del Web. SELECT * FROM categories AS t1 RIGHT JOIN tabla2 AS t2 ON t1.id=t2.id WHERE t1.order=0 ---->esto me hace el join entre 2 tablas IFNULL(COUNT(t3.service),0) AS ...
  #1 (permalink)  
Antiguo 28/01/2012, 14:26
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 12 años, 11 meses
Puntos: 1
JOIN dos tablas mas COUNT en una tercera

SELECT * FROM categories AS t1 RIGHT JOIN tabla2 AS t2
ON t1.id=t2.id WHERE t1.order=0 ---->esto me hace el join entre 2 tablas

IFNULL(COUNT(t3.service),0) AS count
FROM tabla3 ----> cuenta las lineas de la 3ra inclusive los valores nulos como 0

Estoy intentando hacer un solo query que haga lo que necesito, con la primera obtengo todas las lineas de tabla1 y tabla2 , pero necesito un campo adicional, que es la suma de lineas que coinciden con un campo en la tabla1(id) en una tabla3 , ademas una doble coincidencia en la misma tabla, Me explico mejor aqui.
tabla1
id = 1 a 12, order = 1 a 12 (estas doce lineas que necesito obtenidas en el 1er join)
esta misma tabla1 tiene otra columna parent
parent = 1 a 12 (varias lineas con valores 1 a 12)

el ultimo valor es suma de lineas de un tercera tabla
tabla3
campo = valores del 13 al 121 por supuesto repetidos
Lo que deseo conseguir es las doce filas unidas mas un campo que es la suma de lineas en la tabla3 esta suma es tabla3 donde tabla1.parent = tabla1_order (si, coincidencia en la misma tabla)

Alguna idea? Muchas gracias por adelantado
  #2 (permalink)  
Antiguo 28/01/2012, 15:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: JOIN dos tablas mas COUNT en una tercera

Código MySQL:
Ver original
  1. FROM categories AS t1 RIGHT JOIN tabla2 AS t2 ON t1.id=t2.id
  2. WHERE t1.order=0 IFNULL(COUNT(t3.service),0) AS count
  3. FROM tabla3
Si esto es lo que estás intentando, está completamente mal escrito.
¿Estás seguro de haber realizado esa consulta así?
En cualquier caso eso te está devolviendo, en su primer parte, todo lo que está en Tabla2, que coincida o no con Tabla1, pero también está devolviendo los que no coinciden de la Tabla2.
¿Eso es lo que quieres?
Además, no estás haciendo en esa consulta el correspondiente JOIN a la tercera tabla, ni obteniendo la lista de valores con qué comparar un campo determinado de las otras tablas, por cuando el segundo SELECT ... FROM... no está dentro de una subconsulta.

En cualquier caso deberías ser un poquitín más claro con lo que quieres:
1) Registros coincidentes entre Tabla1 y Tabla2, usando la PK de cada una como relación, obteniendo los ID iguales o menores a 12, los que en la Tabla1, tengan order entre 1 y 12, y también partent entre 1 y 12.
2) El resultado de esta tabla debe usarse para un JOIN tal que sume los valores de un campo, y que esté relacionado con las otras por medio del campo parent de la Tabla1...

Mira, a priori parece que hubieras intentado hacer una descripción genérica de un caso que no es este.
¿Podrías no hacernos perder el tiempo y postear el caso real que te ocupa, con los nombres reales de las tablas, los campos y los tipos de dato.
El planteo que haces es tán abstracto que resulta casi imposible hacer una interpretación que sirva para darte un ejemplo. Falta informacón crítica para la respuesta, como es el nivel de agregación (SUM() se usa con GROUP BY y tu no estás aclarando cómo se agrupa), no queda claro si la relación es entre la Tabla3 y la Tabla1 qué harás con los NULL que te devolverá ese RIGHT JOIN, y por sobre todo, no podemos inferir en qué consisten las relaciones, porque las FK no resultan muy claras.
Eso, sin contar conque esos campos, por los nombres que propones, te darán errores de sintaxis, porque usas palabras reservadas...

Por favor, pon el caso real, con los nombres reales y el modelo real. Las abstracciones no sirven en el 99% de los casos para poder responder cosas coherentes.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/01/2012, 15:40
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: JOIN dos tablas mas COUNT en una tercera

las dos lineas de codigo que he escrito son solo una idea de lo que usar , pero mi problema es la sintaxis , es verdad que he cometido el error al final en la primera parte de codigo , deberia ser asi:
SELECT * FROM categories AS t1 RIGHT JOIN tabla2 AS t2
ON t1.id=t2.id WHERE t1.srt_order=0
Pero esto solo indica el join entre tabla1 y tabla2 si tuviese que añadirle el campo que recopilo de la
tabla 3

tabla1
id parent_id srt_order
1 0 1
2 0 2
3 0 3
4 0 4
5 1 0
6 2 0
7 3 0

tabla 3

id
  #4 (permalink)  
Antiguo 28/01/2012, 15:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: JOIN dos tablas mas COUNT en una tercera

Como ya te dije, la tercera tabla requiere un criterio de agrupamiento.
¿Cuál es el criterio de agrupamiento que quieres usar? ¿Qué datos son los discriminantes y de qué tablas?

Tampoco nos estás diciendo cómo estableces la relación entre Tabla1 y Tabla3.
Desde ya te advierto que al usar un RIGHT JOIN, y si la Tabla1 devuelve respuestas NULL si la FK no es NOT NULL, es posible que la información sea inexacta o haya faltantes.
¿Has considerado ese caso?

Sigo creyendo que estás tratando de mostrar un ejemplo abstracto para un problema concreto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/01/2012, 16:01
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: JOIN dos tablas mas COUNT en una tercera

las dos lineas de codigo que he escrito son solo una idea de lo que usar , pero mi problema es la sintaxis , es verdad que he cometido el error al final en la primera parte de codigo , deberia ser asi:
SELECT * FROM categories AS t1 RIGHT JOIN tabla2 AS t2
ON t1.id=t2.id WHERE t1.parent_id=0
Pero esto solo indica el join entre tabla1 y tabla2 si tuviese que añadirle el campo que recopilo de la
tabla 3 ( ese es mi problema)

tabla1
id parent_id srt_order
1 0 1
2 0 2
3 0 3
4 0 4
5 1 0
6 1 0
7 2 0
8 3 0
9 3 0
10 4 0

tabla2
id descr othervalue
1 0 1
2 0 2
3 0 3
4 0 4

tabla 3
id service
1 5
2 5
3 6
4 6
5 7
6 8

Esto es lo que necesito ademas del join con la tabla 2 que no es mayor problema . Sumar todos los tabla3.service WHERE tabla3.service = tabla1.id para cada tabla1.srt_order = tabla1.parent_id

Ejemplo
El primer y seg valor devuelto deberia ser :
id parent_id srt_order descr COUNT(service)
1 0 1 0 4
2 0 2 0 1

este query me suma todos los service sin diferenciarlos por t1.parent_id ni t1.srt_order:
"SELECT t1.*,t2.*, IFNULL(COUNT(t3.service),0) AS count FROM tabla3 AS t3 , tabla1 AS t1 RIGHT JOIN tabla2 AS t2
ON t1.id = t2.id WHERE t1.parent_id=0 GROUP BY t1.id"

Muchas gracias por la ayuda

Y lo siento, no estoy muy acomstumbrado a los foros, ni siquiera puedo borrar post , ni se que caracateres me va a suprimir, tampoco se exactamente como copiais de mysql , (los espacios en mi caso indican tab)

Última edición por mikexloo; 29/01/2012 a las 17:46
  #6 (permalink)  
Antiguo 03/02/2012, 05:34
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: JOIN dos tablas mas COUNT en una tercera

This does it Thank you
table1 = t1 , table2=t2, table3=t3 , t11 = table1 rejoined
"SELECT t1.id
, t1.parent_id
, t1.srt_order
, t2.desc,t2.other,
, COUNT(t3.id) AS Count
FROM t1
INNER JOIN t1 AS t11 ON t11.parent_id = t1.id
INNER JOIN t2 ON t2.id = t1.id
LEFT OUTER JOIN t3 ON t3.service = t11.id
GROUP BY
t1.id
, t1.parent_id
, t1.srt_order
, t2.desc"

Etiquetas: count, join, query, 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 01:59.