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

Error 1066: Not unique table/alias: 'accounts'

Estas en el tema de Error 1066: Not unique table/alias: 'accounts' en el foro de Mysql en Foros del Web. Estimados. Actualmente, me veo en la necesidad de realizar querys a la DB de Plesk (un panel de control para sitios web). Estos datos, de ...
  #1 (permalink)  
Antiguo 26/08/2010, 00:26
 
Fecha de Ingreso: abril-2005
Ubicación: 34°35'49.20"S | 58°24'06.
Mensajes: 158
Antigüedad: 19 años
Puntos: 3
Pregunta Error 1066: Not unique table/alias: 'accounts'

Estimados.
Actualmente, me veo en la necesidad de realizar querys a la DB de Plesk (un panel de control para sitios web).

Estos datos, de vez en cuando lo requieren en Atencion al Cliente para verificacion de los datos de los usuarios cuando solicitan alguna modificacion, para comprobar que es realmente quien dice ser (si, deberian utilizar algun otro metodo... pero asi trabajaron durante años. De a poco, estoy realizando los cambios que necesito)

Cada tanto (24 horas), realizo un export a CSV de los datos y actualizo un sistema interno.

Por motivos de practicos, quiero que en vez de exportar cada resultado; obtener un solo CSV y luego parsearlo y realizar todo de una sola vez.

Algunas de las consultas que realizo son:

Obtener dominio, usuario y clave
Código MySQL:
Ver original
  1. SELECT sys_users.home   AS dominio,
  2.        sys_users.login   AS ftp_usuario,
  3.        accounts.password AS ftp_clave
  4.  
  5.     FROM sys_users
  6.  
  7.     LEFT JOIN accounts on sys_users.account_id=accounts.id
  8.     ORDER BY dominio ASC

Obtener dominios, casillas y claves:
Código MySQL:
Ver original
  1. SELECT CONCAT_WS('@',mail.mail_name,domains.name),accounts.password
  2. FROM domains,mail,accounts
  3. WHERE domains.id=mail.dom_id AND accounts.id=mail.account_id
  4. ORDER BY domains.name ASC,mail.mail_name ASC

Ahora, el problema que tengo, es que al querer unir estas consultas con UNION, me tira todo en 3 columnas (dominio, ftp_usuario,ftp_clave) y queda todo muy mal ordenado

Código MySQL:
Ver original
  1. (SELECT sys_users.home   AS dominio,
  2.        sys_users.login   AS ftp_usuario,
  3.        accounts.password AS ftp_clave
  4.  
  5.     FROM sys_users
  6.  
  7.     LEFT JOIN accounts on sys_users.account_id=accounts.id
  8.     ORDER BY dominio ASC) UNION (SELECT CONCAT_WS('@',mail.mail_name,domains.name),
  9.     accounts.password,
  10.     "fake_col!" as ctest_text
  11.  
  12. FROM domains,mail,accounts
  13.  
  14. WHERE domains.id=mail.dom_id AND accounts.id=mail.account_id
  15.  
  16. ORDER BY domains.name ASC,mail.mail_name ASC)

Nota: Fake_col! es una columna que adicione en la segunda query, para poder utilizar UNION (hay diferencia de columnas en el resultado)

Esta consulta me devuelve datos que no me son utiles (en realidad, no me es util la forma en que lo hace), asi que probe (intento) unificar todo en una sola consulta:

Código MySQL:
Ver original
  1. SELECT sys_users.home   AS dominio,
  2.        sys_users.login   AS ftp_usuario,
  3.        accounts.password AS ftp_clave,
  4.  
  5.     CONCAT_WS('@',mail.mail_name,domains.name),
  6.     accounts.password
  7.  
  8.     FROM sys_users,domains,mail,accounts
  9.     LEFT JOIN accounts on sys_users.account_id=accounts.id
  10.     WHERE domains.id=mail.dom_id AND accounts.id=mail.account_id
  11.     ORDER BY dominio ASC, domains.name ASC,mail.mail_name ASC

Esta query, me arroja el error
Cita:
Error Code: 1066
Not unique table/alias: 'accounts'
Evidentemente (y efectivamente), 'accounts' se repite varias veces.

Entonces, como deberia formular la query?
Debo utilizar mas variables?

La verdad que mis conocimientos sobre mysql son limitados y siendo las 3 am (Argentina) ya estoy lo suficientemente cansado para seguir probando.

PD: El formato que estoy necesitando para hacerlo mas sencillo es:

Cita:
ftp_user ftp_clave mail_casilla mail_pass
ftp1 clave1 mail1 clave1
ftp1 clave1 mail2 clave2
ftp1 clave1 mail3 clave3
ftp2 clave2 mail1 clave1
ftp2 clave2 mail2 clave2
Se que no es el mejor formato, pero asi lo necesita el sistema.

Gracias por la ayuda
__________________
P M3 d4 p0® 3s©r1bir c0mo 1diota 3n el M3sen11er ¿3s0 m3 c0nv13rte en h4ck3r?
R No. Solo eres un tonto.
  #2 (permalink)  
Antiguo 26/08/2010, 03:02
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, 5 meses
Puntos: 2658
Respuesta: Error 1066: Not unique table/alias: 'accounts'

¡No te ahogues en un vaso de agua, por favor!

Parea eso precisamente existen los alias en los DBMS. Es decir, simplemente cambia el nombre de representación:

Código MySQL:
Ver original
  1.     SU.home   dominio,
  2.     SU.login   AS ftp_usuario,
  3.     AC1.password AS ftp_clave,
  4.     CONCAT_WS('@', MA.mail_name, DO.name),
  5.     AC2.password
  6. FROM sys_users SU, domains DO, mail MA, accounts AC1
  7.     LEFT JOIN accounts AC2 on SU.account_id=AC2.id
  8. WHERE DO.id=MA.dom_id AND AC1.id=MA.account_id
  9. ORDER BY dominio, DO.name, MA.mail_name;

Esa sería la idea. Fíjate si la lógica de relaciones es correcta, porque el uso de account sólo lo sabes tu.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
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 07:22.