我用join做了一个简单的查询,但是总是得到这个恼人的错误。
查询:
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;
错误:
“字段列表”中的未知列“verk.id”
提供了一个关于rextester的演示:
http://rextester.com/HDTJAA39589
我已经试图将“
verk
”从verk.id
离开,但随后又出现另一个错误:ID不明确..
最佳答案
此查询中至少有两个问题。
首先,当使用back ticks分隔标识符时,必须将表别名与列名分开分隔。
`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