这个问题已经在这里有了答案 :
ON子句中的MySQL未知列 (3个答案)
5年前关闭。
我有以下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
您可以看到,它连接了三个表等。总之,问题在于它给出了一个错误:
ERROR CODE:
SQL Error (1054): Unknown column 'posts.author' in 'on clause'
即使在另一个页面上使用此更简单的查询也可以:
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
有谁想到为什么会这样?谢谢你的帮助。
因为您的混合连接语法
From Mysql
[docs]
但是,逗号运算符的优先级小于INNER JOIN,CROSS JOIN,LEFT JOIN等。
如果在存在联接条件时将逗号联接与其他联接类型混合使用,则可能会出现“ on子句”中形式为“未知列” col_name”的错误
。本节稍后将提供有关解决此问题的信息。
解决方案是:
要允许处理连接,请使用括号将前两个表显式分组,以使ON子句的操作数为(t1,t2)和t3:
选择* FROM(t1,t2)JOIN t3 ON(t1.i1 = t3.i3);
或者 ,避免使用逗号运算符,而改为使用JOIN:
选择* FROM t1 JOIN t2 JOIN t3 ON(t1.i1 = t3.i3);
问题内容: 我有以下MySQL查询: 我收到此错误: #1054-‘on子句’中的未知列’p.id’ 据我所知,查询看起来是正确的,知道发生什么了吗? 问题答案: 不要混合使用ANSI-89样式和ANSI-92样式的连接。它们具有不同的优先级,这可能导致混乱的错误,这就是这里发生的情况。您的查询的解释如下: 在上面的示例中,在甚至考虑了逗号样式的连接之前,首先评估使用JOIN关键字的连接。届时该表
问题内容: 我有一个名为表有三列:,,。 我正在尝试创建一个查询,该查询将根据昵称返回余额,并且在使用此查询时遇到错误: 有人可以在这里看到我做错了吗? 问题答案: 反引号(`)用于标识符,例如表名,列名等。单引号(’)用于字符串文字。 您想做: 或者,更明确地说: 如果没有歧义的可能性,并且表/列名称没有特殊字符或空格,则可以将`设置为off。 这是一些干燥且难以阅读的文档:http : //d
我试图在WHERE子句中将一个列从外部查询传递给内部查询,如下所示,MySQL不喜欢这样做。我不确定如何重写这个查询使其工作。 我很想知道如何让这个工作或重写它,使它将工作。我使用的是MySQL5.6,所以我没有可用的窗口函数,否则我认为可以工作。
问题内容: 我有一个数据库,其中有四列对应于开始和结束位置的地理坐标x,y。这些列是: 00 00 x1 11 我有这四个列的索引,其顺序为x0,y0,x1,y1。 我列出了大约一百种地理对组合。我将如何有效地查询此数据? 我想按照此SO答案的建议执行类似的操作,但它仅适用于Oracle数据库,不适用于MySQL: 我以为可能对索引做些什么?最好的方法是什么(即:最快的查询)?谢谢你的帮助! 笔记
问题内容: 有没有一种方法可以模拟MySQL中的OUTPUT子句,因为我们在SQL Server中有一个OUTPUT子句。 这是我的查询类型 因为我也需要MySQL服务器数据库具有此功能。 请提出实现此功能的最佳方法。 问题答案: 您可以创建触发器并将所需的值插入另一个表。 我不确定,但是-对于MYISAM表,您可以锁定表,选择值并将其插入另一个表,然后更新和解锁表。 编辑: 我已经尝试了一种使用