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

marca error de alias

Estas en el tema de marca error de alias en el foro de Mysql en Foros del Web. Buenas tengan compañeros del foro tengo una consulta donde junto varios campos de varias tablas jajaja ... la consulta es la siguiente @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 25/10/2011, 18:15
Avatar de edgar_cln  
Fecha de Ingreso: agosto-2010
Ubicación: Sierra Sinaloense
Mensajes: 122
Antigüedad: 13 años, 8 meses
Puntos: 4
marca error de alias

Buenas tengan compañeros del foro tengo una consulta donde junto varios campos de varias tablas jajaja ... la consulta es la siguiente
Código MySQL:
Ver original
  1.     REMD.NO_REM,
  2.     REMD.SUC_REM,
  3.     REMD.CSE_PROD,
  4.     REMD.CVE_PROD,
  5.     PRO_DESC.DESC1 as descr,
  6.     REMD.UNIDAD,
  7.     REMD.CANT_SURT,
  8.     REMD.VALOR_PROD,
  9.     REMD.DESCU_PROD,
  10.     REMD.SUBT_PROD,
  11.     REMC.STATUS_REM,
  12.     REMC.FALTA_REM,
  13.     SUCURSAL.SUCURSAL,
  14.     PRODUCTO.CTO_ENT AS ctoentra,
  15.     COSTEOC.COSTO_UNI AS costuni,
  16.     COSTEOS.STATUS,
  17.     DESC_PROV.NO_FACC as fact,
  18.     DESC_PROV.SUBTOTAL AS subt,
  19.     COMPRAS.CANT_SURT AS surt,
  20.     COMPRAS.NO_FACC as comfact
  21.     from REMD
  22.     left join SUCURSAL on REMD.SUC_REM=SUCURSAL.CVE_SUC
  23.     left join PRO_DESC on REMD.CVE_PROD=PRO_DESC.CVE_PROD
  24.     left join REMC on REMD.NO_REM=REMC.NO_REM
  25.     LEFT JOIN PRODUCTO on REMD.CVE_PROD=PRODUCTO.CVE_PROD
  26.     LEFT JOIN COSTEOC ON REMD.CVE_PROD=COSTEOC.CVE_PROD
  27.     left join COSTEOS on COSTEOC.NO_COSTEO=COSTEOS.NO_COSTEO
  28.     left join DESC_PROV ON REMD.CVE_PROD=DESC_PROV.CVE_PROD
  29.     left join COMPRAS ON REMD.CVE_PROD=COMPRAS.CVE_PROD
  30.     left join DESC_PROV ON COMPRAS.NO_FACC=DESC_PROV.NO_FACC
  31.     WHERE REMD.SUC_REM='MER' AND REMC.FALTA_REM BETWEEN '2010-09-01' AND '2010-09-30'  AND COSTEOS.STATUS='Activo' and REMC.STATUS_REM='Facturada' OR 'Emitida'
  32.     ORDER BY REMD.CSE_PROD

me sale el siguiente error "Not unique table/alias: 'DESC_PROV'" y ya le cambie de alias y todo y me sigue marcando lo mismo :S:S:s ... espero su ayuda compañeros de antemano muchas graciass
  #2 (permalink)  
Antiguo 25/10/2011, 18:59
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: marca error de alias

Estás llamando dos veces a la tabla DESC_PROV sin asignarle un alias. Ese alias no es el que va en el SELECT sino el que debe ir en el FROM, cuando realizas una doble invocación a la misma tabla.
Cuando llamas dos o más veces una misma tabla en el FROM debes obligatoriamente ponerles alias diferentes, o de lo contrario MySQL no sabrá a cuál invocación te estás refiriendo...
Código MySQL:
Ver original
  1.     REMD.NO_REM,
  2.     REMD.SUC_REM,
  3.     REMD.CSE_PROD,
  4.     REMD.CVE_PROD,
  5.     PRO_DESC.DESC1 as descr,
  6.     REMD.UNIDAD,
  7.     REMD.CANT_SURT,
  8.     REMD.VALOR_PROD,
  9.     REMD.DESCU_PROD,
  10.     REMD.SUBT_PROD,
  11.     REMC.STATUS_REM,
  12.     REMC.FALTA_REM,
  13.     SUCURSAL.SUCURSAL,
  14.     PRODUCTO.CTO_ENT AS ctoentra,
  15.     COSTEOC.COSTO_UNI AS costuni,
  16.     COSTEOS.STATUS,
  17.     DP1.NO_FACC as fact,
  18.     DP2.SUBTOTAL AS subt,
  19.     COMPRAS.CANT_SURT AS surt,
  20.     COMPRAS.NO_FACC as comfact
  21.     FROM REMD
  22.     LEFT JOIN SUCURSAL on REMD.SUC_REM=SUCURSAL.CVE_SUC
  23.     LEFT JOIN PRO_DESC on REMD.CVE_PROD=PRO_DESC.CVE_PROD
  24.     LEFT JOIN REMC on REMD.NO_REM=REMC.NO_REM
  25.     LEFT JOIN PRODUCTO on REMD.CVE_PROD=PRODUCTO.CVE_PROD
  26.     LEFT JOIN COSTEOC ON REMD.CVE_PROD=COSTEOC.CVE_PROD
  27.     LEFT JOIN COSTEOS on COSTEOC.NO_COSTEO=COSTEOS.NO_COSTEO
  28.     LEFT JOIN DESC_PROV DP1 ON REMD.CVE_PROD=DP1.CVE_PROD
  29.     LEFT JOIN COMPRAS ON REMD.CVE_PROD=COMPRAS.CVE_PROD
  30.     LEFT JOIN DESC_PROV DP2 ON COMPRAS.NO_FACC=DP2.NO_FACC
  31.     WHERE REMD.SUC_REM='MER' AND REMC.FALTA_REM BETWEEN '2010-09-01' AND '2010-09-30'  AND COSTEOS.STATUS='Activo' AND REMC.STATUS_REM='Facturada' OR 'Emitida'
  32.     ORDER BY REMD.CSE_PROD

Aunque estimo que lo que realmente está sucediendo en el caso es que la relación de esa tabla con el resto es a través de dos campos, caso en el cual no debes llamarla dos veces, sino indicar en el ON ambos campos:

Código MySQL:
Ver original
  1.     REMD.NO_REM,
  2.     REMD.SUC_REM,
  3.     REMD.CSE_PROD,
  4.     REMD.CVE_PROD,
  5.     PRO_DESC.DESC1 as descr,
  6.     REMD.UNIDAD,
  7.     REMD.CANT_SURT,
  8.     REMD.VALOR_PROD,
  9.     REMD.DESCU_PROD,
  10.     REMD.SUBT_PROD,
  11.     REMC.STATUS_REM,
  12.     REMC.FALTA_REM,
  13.     SUCURSAL.SUCURSAL,
  14.     PRODUCTO.CTO_ENT AS ctoentra,
  15.     COSTEOC.COSTO_UNI AS costuni,
  16.     COSTEOS.STATUS,
  17.     DP1.NO_FACC as fact,
  18.     DP2.SUBTOTAL AS subt,
  19.     COMPRAS.CANT_SURT AS surt,
  20.     COMPRAS.NO_FACC as comfact
  21.     FROM REMD
  22.     LEFT JOIN SUCURSAL on REMD.SUC_REM=SUCURSAL.CVE_SUC
  23.     LEFT JOIN PRO_DESC on REMD.CVE_PROD=PRO_DESC.CVE_PROD
  24.     LEFT JOIN REMC on REMD.NO_REM=REMC.NO_REM
  25.     LEFT JOIN PRODUCTO on REMD.CVE_PROD=PRODUCTO.CVE_PROD
  26.     LEFT JOIN COSTEOC ON REMD.CVE_PROD=COSTEOC.CVE_PROD
  27.     LEFT JOIN COSTEOS on COSTEOC.NO_COSTEO=COSTEOS.NO_COSTEO
  28.     LEFT JOIN DESC_PROV DP1 ON (REMD.CVE_PROD=DESC_PROV.CVE_PROD AND COMPRAS.NO_FACC=DESC_PROV.NO_FACC)
  29.     LEFT JOIN COMPRAS ON REMD.CVE_PROD=COMPRAS.CVE_PROD
  30.     WHERE REMD.SUC_REM='MER' AND REMC.FALTA_REM BETWEEN '2010-09-01' AND '2010-09-30'  AND COSTEOS.STATUS='Activo' AND REMC.STATUS_REM='Facturada' OR 'Emitida'
  31.     ORDER BY REMD.CSE_PROD
__________________
¿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 26/10/2011, 11:51
Avatar de edgar_cln  
Fecha de Ingreso: agosto-2010
Ubicación: Sierra Sinaloense
Mensajes: 122
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: marca error de alias

Hola gnzsoloyo primero que nada muchas gracias por tu ayuda, el primer ejemplo que me diste me funciono pero creo los campso "fact" y "subt" me aparecen NULL ... eso quiere decir que esta mal unido un inner join ... el segundo ejemplo que me pusiste pues ese me marca el alias .... pero podrias ayudarme por que aparecen NULL te lo agradeceria much0o d antemano .. gracias !
  #4 (permalink)  
Antiguo 26/10/2011, 12:07
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: marca error de alias

Te aparecen NULLporque estás usando LEFT JOIN y no INNER JOIN.
LEFT JOIN devuelve todo lo que haya en la tabla izquierda, tenga o no coincidencias en la de la derecha.
En cuanto al segundo ejemplo, mira bien que los alias del SELECT se correspondan con los que se puedan usar en el FROM, y que no se repita ninguno en el FROM.
__________________
¿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 26/10/2011, 17:48
Avatar de edgar_cln  
Fecha de Ingreso: agosto-2010
Ubicación: Sierra Sinaloense
Mensajes: 122
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: marca error de alias

Gracias de nuevo gnzsoloyo, el primer ejemplo que me diste es el que mas se acerta, a exepcion de que me sale NULL, pero en si mi tabla si tiene datos en los campos "fact" y "subt" ... tonces pieno que a de tar mal relacionado...primero hize esta consulta
Código MySQL:
Ver original
  1.     DESC_PROV.NO_FACC,
  2.     DESC_PROV.CVE_PROD,
  3.     DESC_PROV.SUBTOTAL,
  4.     DESC_PROV.NOM_PROV,
  5.     COMPRAS.CANT_SURT,
  6.     COMPRAS.NO_FACC, COMPRAS.CVE_PROD,
  7.     DESC_PROV.SUBTOTAL / COMPRAS.CANT_SURT AS TOTAL
  8.     FROM DESC_PROV
  9.     INNER JOIN COMPRAS ON DESC_PROV.NO_FACC=COMPRAS.NO_FACC
  10.     WHERE DESC_PROV.NO_FACC='04105'

ai saco los campo y divido de las dos tabla que especifico y la otra consulta que tengo es esta
Código MySQL:
Ver original
  1.         REMD.NO_REM,
  2.         REMD.SUC_REM,
  3.         REMD.CSE_PROD,
  4.         REMD.CVE_PROD,
  5.         PRO_DESC.DESC1 as descr,
  6.         REMD.UNIDAD,
  7.         REMD.CANT_SURT,
  8.         REMD.VALOR_PROD,
  9.         REMD.DESCU_PROD,
  10.         REMD.SUBT_PROD,
  11.         REMC.STATUS_REM,
  12.         REMC.FALTA_REM,
  13.         SUCURSAL.SUCURSAL,
  14.         PRODUCTO.CTO_ENT AS ctoentra,
  15.         COSTEOC.COSTO_UNI AS costuni,
  16.         COSTEOS.STATUS
  17.         FROM REMD
  18.         LEFT JOIN SUCURSAL on REMD.SUC_REM=SUCURSAL.CVE_SUC
  19.         LEFT JOIN PRO_DESC on REMD.CVE_PROD=PRO_DESC.CVE_PROD
  20.         LEFT JOIN REMC on REMD.NO_REM=REMC.NO_REM
  21.         LEFT JOIN PRODUCTO on REMD.CVE_PROD=PRODUCTO.CVE_PROD
  22.         LEFT JOIN COSTEOC ON REMD.CVE_PROD=COSTEOC.CVE_PROD
  23.         LEFT JOIN COSTEOS on COSTEOC.NO_COSTEO=COSTEOS.NO_COSTEO
  24.         WHERE REMD.SUC_REM='MER' AND REMC.FALTA_REM BETWEEN '2010-09-01' AND '2010-09-30'  AND COSTEOS.STATUS='Activo' AND REMC.STATUS_REM='Facturada' OR 'Emitida'
  25.         ORDER BY REMD.CSE_PROD

te lo pongo todo desde el principio pa qu eme entiendas por que en si no soy bueno pa dar explicaciones jaja, quiero unir la dos consultas que te puse, el campo que tienen en comun la tabla REMD con la tabla COMPRAS Y DESC_PROV es el campo "CVE_PROD" ... y cuando hago combino las dos consultas que es la que me sale que puse de ejemplo para la ayuda pues me sale NULL o que el alias debe ser diferente.....te pediria este gran favor, y te lo agradeceria muchoo ...
  #6 (permalink)  
Antiguo 03/11/2011, 19:26
Avatar de edgar_cln  
Fecha de Ingreso: agosto-2010
Ubicación: Sierra Sinaloense
Mensajes: 122
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: marca error de alias

necesitare ayuda hermanoss !!

Etiquetas: alias, campos, join, marca, 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 02:34.