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

Quien me ayuda con esta query

Estas en el tema de Quien me ayuda con esta query en el foro de Mysql en Foros del Web. me tira el error "all derived tables must have its won alias" pero todas las consultas generadas tienen su alias propiamente puesto o no? @import ...
  #1 (permalink)  
Antiguo 04/03/2011, 08:42
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Quien me ayuda con esta query

me tira el error "all derived tables must have its won alias"

pero todas las consultas generadas tienen su alias propiamente puesto o no?

Código MySQL:
Ver original
  1. SELECT cc.dg_codigo, cc.dg_cuenta_contable,
  2.     SUM(da.dq_debe) AS dq_debe_actual, SUM(dc.dq_debe) AS dq_debe_compare,
  3.     SUM(da.dq_haber) AS dq_haber_actual, SUM(dc.dq_haber) AS dq_haber_compare FROM (SELECT * FROM tb_cuenta_contable WHERE dc_empresa = 1) AS cc
  4.     JOIN (SELECT * FROM tb_comprobante_contable_detalle AS det
  5.                 LEFT JOIN (SELECT * FROM tb_comprobante_contable WHERE dc_anho_contable = 2011) AS com ON det.dc_comprobante = com.dc_comprobante) AS da ON cc.dc_cuenta_contable = da.dc_cuenta_contable
  6.     LEFT JOIN (SELECT * FROM tb_comprobante_contable_detalle AS deta
  7.                 LEFT JOIN (SELECT * FROM tb_comprobante_contable WHERE dc_anho_contable = 2010)) AS comp ON deta.dc_comprobante = comp.dc_comprobante) AS dc ON cc.dc_cuenta_contable = dc.dc_cuenta_contable GROUP BY cc.dc_cuenta_contable

por fis si me pueden ayudar :P
  #2 (permalink)  
Antiguo 04/03/2011, 08:51
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: Quien me ayuda con esta query

Para poder ver dónde te falta el alias, es mejor poner la sentencia en un modo más estructurado:
Código MySQL:
Ver original
  1.     cc.dg_codigo,
  2.     cc.dg_cuenta_contable,
  3.     SUM(da.dq_debe) AS dq_debe_actual,
  4.     SUM(dc.dq_debe) AS dq_debe_compare,
  5.     SUM(da.dq_haber) AS dq_haber_actual,
  6.     SUM(dc.dq_haber) AS dq_haber_compare
  7.   (SELECT * FROM tb_cuenta_contable WHERE dc_empresa = 1) AS cc
  8.   JOIN
  9.     (SELECT *
  10.     FROM tb_comprobante_contable_detalle AS det
  11.     LEFT JOIN
  12.       (SELECT *
  13.       FROM tb_comprobante_contable
  14.       WHERE dc_anho_contable = 2011) AS com
  15.     ON det.dc_comprobante = com.dc_comprobante) AS da
  16.   ON cc.dc_cuenta_contable = da.dc_cuenta_contable
  17.     (SELECT *
  18.     FROM tb_comprobante_contable_detalle AS deta
  19.     LEFT JOIN
  20.       (SELECT *
  21.       FROM tb_comprobante_contable
  22.       WHERE dc_anho_contable = 2010) -- < acá le valta el alias
  23.     ) AS comp ON deta.dc_comprobante = comp.dc_comprobante) AS dc
  24.   ON cc.dc_cuenta_contable = dc.dc_cuenta_contable
  25. GROUP BY cc.dc_cuenta_contable;
Por cierto, desde hace algunos años se eliminó la necesidad de poner AS. Ya no es parte del modelo. Simplemente pon el alias y funcionará igual.
__________________
¿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 04/03/2011, 09:48
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Quien me ayuda con esta query

Ya lo solucioné xD

donde tu pusiste que le faltaba el alias en realidad no faltaba xD
si te das cuenta le puse un paréntesis de más xD

gracias por la ayuda.

el no ponerle AS queda en sql estandar tambien?
  #4 (permalink)  
Antiguo 04/03/2011, 09:57
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: Quien me ayuda con esta query

No poner el AS es actualmente parte del estandar. Eso se eliminó de los requerimientos del ANSI-SQL hace años.
Respecto al paréntesis, si hubieses puesto un paréntesis de más, te hubiese dado un error de sintaxis y no una falta de alias en la tabla derivada. Si te fijas en el segmento:
Código SQL:
Ver original
  1. LEFT JOIN
  2.       (SELECT *
  3.       FROM tb_comprobante_contable
  4.       WHERE dc_anho_contable = 2010)
eso es una tabla derivada de una subconsulta, y no tiene alias. El siguiente alias corresponde a este segmento:
Código MySQL:
Ver original
  1.     FROM tb_comprobante_contable_detalle AS deta
  2.     LEFT JOIN
  3.       (SELECT *
  4.       FROM tb_comprobante_contable
  5.       WHERE dc_anho_contable = 2010) -- < acá le valta el alias
  6.     ) AS comp ON deta.dc_comprobante = comp.dc_comprobante
No me parece que esté sobrando un paréntesis...
__________________
¿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 04/03/2011, 19:15
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Quien me ayuda con esta query

El de esa agrupación es este el alias

Código MySQL:
Ver original
  1.     FROM tb_comprobante_contable_detalle AS deta
  2.     LEFT JOIN
  3.       (SELECT *
  4.       FROM tb_comprobante_contable
  5.       WHERE dc_anho_contable = 2010) -- < acá le valta el alias
  6.     ) AS comp ON deta.dc_comprobante = comp.dc_comprobante) AS dc

dc

si le borre el parentesis y funciono :3

Etiquetas: query
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:36.