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