unknown product_id note error column mysql sql join mysql-error-1054

product_id - MySQL "Columna desconocida en la cláusula activa"



unknown column ''< product_id>'' in field list (4)

Dar un alias a las tablas en la cláusula from y rodearlas con paréntesis lo haría funcionar. Pero mezclar combinaciones sigue siendo una mala práctica.

Esta pregunta ya tiene una respuesta aquí:

Tengo la siguiente consulta MySQL:

SELECT posts.id, posts.name, LEFT(posts.content, 400), posts.author, posts.date, users.display_name, GROUP_CONCAT(tags.tag ORDER BY tag_linking.pid ASC SEPARATOR ",") update_tags FROM posts, tag_linking, tags INNER JOIN `users` ON posts.author=users.id; WHERE tag_linking.pid = posts.id AND tags.id = tag_linking.tid ORDER BY posts.date DESC

Lo cual, se puede ver, conecta tres tablas, etc. De todos modos, el problema es que da un error:

ERROR CODE: SQL Error (1054): Unknown column ''posts.author'' in ''on clause''

a pesar de que esta consulta más simple utilizada en otra página funciona:

SELECT posts.id, posts.name, LEFT(posts.content, 400), posts.author, posts.date, users.display_name FROM `posts` INNER JOIN `users` ON posts.author=users.id

¿Alguien tiene pensamientos sobre por qué ocurre esto? Gracias por tu ayuda.


Simplemente dice que el autor no existe en la tabla de publicaciones. o un error de ortografía?


es ese punto y coma que tiene ON posts.author=users.id;


porque tu sintaxis de combinación de mezcla

From Mysql [docs]

Sin embargo, la precedencia del operador de coma es menor que la de INNER JOIN, CROSS JOIN, LEFT JOIN, y así sucesivamente. Si mezcla comas se une con los otros tipos de unión cuando hay una condición de unión, puede producirse un error del formulario Columna desconocida ''col_name'' en ''on clause'' . La información sobre cómo lidiar con este problema se brinda más adelante en esta sección.

la solucion es:

Para permitir que la unión sea procesada, agrupe las dos primeras tablas explícitamente con paréntesis para que los operandos para la cláusula ON sean (t1, t2) y t3:

SELECCIONAR * FROM (t1, t2) UNIR t3 ON (t1.i1 = t3.i3);

Alternativamente , evite el uso del operador de coma y use JOIN en su lugar:

SELECCIONAR * DESDE t1 UNIRSE t2 UNIRSE t3 ENCENDIDO (t1.i1 = t3.i3);