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

#1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

Estas en el tema de #1054 - Unknown column 'tbl_newsletters.id' in 'on clause' en el foro de Mysql en Foros del Web. Con esta consulta Código: SELECT tbl_newsletters_pendientes.id AS id_pendiente, tbl_newsletters_pendientes.email AS para, tbl_newsletters_pendientes.id_newsletter AS id_newsletter, tbl_newsletters.titulo AS asunto, tbl_newsletters.mensaje AS mensaje, tbl_newsletters.email AS de, tbl_newsletters.nombre AS ...
  #1 (permalink)  
Antiguo 28/07/2010, 14:05
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
#1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

Con esta consulta
Código:
SELECT tbl_newsletters_pendientes.id AS id_pendiente, 
tbl_newsletters_pendientes.email AS para, 
tbl_newsletters_pendientes.id_newsletter AS id_newsletter, 
tbl_newsletters.titulo AS asunto, 
tbl_newsletters.mensaje AS mensaje, 
tbl_newsletters.email AS de, 
tbl_newsletters.nombre AS de_nombre, 
tbl_newsletter_config.firma AS firma 
FROM tbl_newsletters, tbl_newsletter_config 
JOIN tbl_newsletters_pendientes ON tbl_newsletters_pendientes.id_newsletter = tbl_newsletters.id 
ORDER BY tbl_newsletters_pendientes.id 
ASC LIMIT 100;
Y esta tabla (entre otras):
Código:
CREATE TABLE `tbl_newsletters` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `fecha_envio` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `mensaje` text COLLATE utf8_unicode_ci NOT NULL,
  `titulo` text COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `nombre` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `destino` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Por que me da el error de que no existe la columna, cuando ANTES, si que me funcionaba. Cuando digo antes, lo digo antes de cambiar de hosting y version de mysql (en local me pasa igual :()

Alguna sugerencia?

Si hago un select * from tbl_newsletters where id=1; no se queja de que no existe la columna id.

Saludos.

EDITO: La consulta, deberia mostrarme datos, seguro, tengo datos para cumplir el JOIN.

Última edición por DooBie; 28/07/2010 a las 14:07 Razón: Pongo el código un poco mas bonito.
  #2 (permalink)  
Antiguo 28/07/2010, 14:11
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: #1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

Consejos dobbie

Utiliza alias para las tablas. Qudan mas legibles.
Haces un join de una tabla con otro de dos tablas separadas por coma(,)

Anida las tres tablas haciendo uso de 2 join no solo de 1. Por ahí puede estar el problema.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 28/07/2010, 14:30
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: #1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

Gracias por los consejos, sobretodo, el de usar alias para las tablas tambien.

Pero, hay una cosa que no entiendo, cuando me dices que hago un join de dos tablas separas por coma...? pero, eso es la sentencia FROM, no es un JOIN, o me pierdo en algo?

No acabo de comprender como meter otro JOIN con las otras tablas, si no tienen relacion entre ellas.

Gracias
  #4 (permalink)  
Antiguo 28/07/2010, 14:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: #1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

En esta parte
Cita:
FROM tbl_newsletters, tbl_newsletter_config
JOIN tbl_newsletters_pendientes ON tbl_newsletters_pendientes.id_newsletter = tbl_newsletters.id
Deberías hacerlo así:

Cita:
FROM tbl_newsletters JOIN tbl_newsletter_config
ON las claves
JOIN
tbl_newsletters_pendientes
ON
tbl_newsletters_pendientes.id_newsletter = tbl_newsletters.id
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 29/07/2010, 12:12
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: #1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

Me ha funcionado con el doble JOIN, pero sigo sin entender por que no encontraba la columna, podría ser algun fallo? o es el funcionamiento correcto?

Saludos y muchas gracias ;)
  #6 (permalink)  
Antiguo 29/07/2010, 12:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: #1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

Como te dije (Y que te ha funcionado) es la forma correcta de trabajar. la verdad no entiendo por que esa consulta no genera error de sintaxis por que a nivel de concepto, no hace las coas bien. Sería necesario hacer un bosquejo de las posibles causas por las que escondía la columna de la tabla.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 29/07/2010, 12:39
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: #1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

La verdad, es que me preocupa que esa consulta no funcionase ahora, ya que antes, si que funcionaba, en otro servidor (he migrado de hosting hace poco). Lo peor, es que ahora no me siento tranquilo, y nose si tendré alguna consulta más por ahi que le pueda pasar lo mismo.

De momento funciona, un saludo
  #8 (permalink)  
Antiguo 29/07/2010, 14:25
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: #1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

No te funcionó porque la sintaxis de MySQL exige que un JOIN entre dos tablas vaya seguido de la condición ON que las relaciona. No puedes poner ON sin poner JOIN o sin poner todos los JOIN con la palabra "JOIN".
En tu caso MySQL interpretó que la cláusula ON correspondía al JOIN entre tbl_newsletter_config y tbl_newsletters_pendientes , ninguna de las cuales contiene tbl_newsletters.id .
El problema se produce porque en el parser, la jerarquía del JOIN está antes de la coma (,) por más que sean semánticamente equivalentes. Entonces cuando encontró un JOIN seguido de un ON, intentó interpretar la relación como basada en las tablas que el JOIN vinculaba, y no pudo.
Consejo básico: Olvídate de la coma. Tiende a producir más errores que ventajas; usa JOIN y recuerda que cada JOIN debe ir seguido por la cláusula ON que vincula la última tabla con la tabla resultado anterior a él.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 29/07/2010, 15:27
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: #1054 - Unknown column 'tbl_newsletters.id' in 'on clause'

Muchas gracias por el consejo gnzsoloyo.
Lo tendré en cuenta para futuras consultas.

Etiquetas: column, unknown
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 11:06.