数据库
首页 > 数据库> > mysql – ‘字段列表’连接中的未知列’..’

mysql – ‘字段列表’连接中的未知列’..’

作者:互联网

我用连接做了一个简单的查询,但总是得到这个恼人的错误.
查询:

SELECT 
    `verk.id`, `verk.date`, `verk.quant`, `verk.verid`, `verk.kunde`, `verk.gebracht`, `loginuser_aqa.name`, `loginuser_aqa.id`
FROM 
    `verk` 
FULL JOIN 
    `loginuser_aqa`
ON
    loginuser_aqa.id = verk.verid
WHERE
    verk.gebracht = 0
ORDER BY  verk.date;

错误:

Unknown column ‘verk.id’ in ‘field list’

在rextester上提供了一个演示:
http://rextester.com/HDTJAA39589
我已经尝试从verk.id离开“verk”,但后来又出现了另一个错误:

id is ambiguous..

解决方法:

您在此查询中至少有两个问题.

首先,当您使用反向标记来分隔标识符时,必须将表别名与列名称分开.

`verk.id`   -- WRONG

`verk`.`id` -- CORRECT

原因是SQL实际上允许您定义包含标点符号,空格等的列名称,如果您分隔列名称.这就是你似乎正在做的事情,请求一个名为verk.id的列

verk.id     -- ALSO CORRECT

正如其他人所评论的那样,您通常不需要使用分隔标识符.如果您的标识符与MySQL Reserved Words冲突,或者您需要使用标点符号,空格或国际字符,请使用它们.

第二个问题是MySQL不支持FULL JOIN.它甚至不将FULL识别为SQL关键字.所以你的查询形成如下:

...
FROM 
    `verk` 
FULL JOIN 
    `loginuser_aqa`
ON ...

由MySQL解释,就好像你已经这样做了:

...
FROM 
    `verk` AS `FULL`
JOIN 
    `loginuser_aqa`
ON ...

换句话说,由于AS是SQL中的可选关键字,因此您只需将FULL设置为verk的表别名.

定义表别名时,必须对属于该表的任何列使用表别名.您不能再将列引用为verk.id,您必须使用FULL.id.这部分是标准的SQL行为,而不是MySQL的错误.

另一个问题是你没有在查询结果中获得FULL OUTER JOIN,你只是得到一个简单的JOIN,它是INNER JOIN的同义词.没有错误,但如果您需要完整的外部联接,您将无法获得预期的结果.

我在2013年报告了MySQL不支持FULL作为保留字的问题:https://bugs.mysql.com/bug.php?id=69858如果您想通过登录并单击该页面上的“影响我”按钮,您可以将您的投票添加到错误的优先级.

如果您需要在MySQL中执行FULL OUTER JOIN,则必须使用变通方法.见这里的例子:Full Outer Join in MySQL

标签:mysql,delimiter,outer-join
来源: https://codeday.me/bug/20190608/1197836.html