| |||
| 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 |
| ||||
| Respuesta: JOIN dos tablas mas COUNT en una tercera
Código MySQL:
Si esto es lo que estás intentando, está completamente mal escrito.Ver originalCopiar ¿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) |
| |||
| 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 |
| |||
| 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 16:46 |
| |||
| 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" |