当前位置: 首页 > 面试题库 >

MySQL的“子句中的已知列”。

厍胤运
2023-03-14
问题内容

这个问题已经在这里有了答案

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表,您可以锁定表,选择值并将其插入另一个表,然后更新和解锁表。 编辑: 我已经尝试了一种使用