我用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

09-11 17:22
查看更多