我用连接做了一个简单的查询,但总是得到这个恼人的错误。
查询:
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不明确..
答案 0 :(得分:3)
此查询中至少有两个问题。
首先,当您使用反向标记来分隔标识符时,必须将表别名与列名称分开。
`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
答案 1 :(得分:2)
你把整个东西放在反叛中。
而不是:
`table.col`
使用
`table`.`col`
此外,MySQL没有FULL JOIN
。请使用FULL JOIN检查您想要达到的目标。有模拟它的技术。
试试这个:
SELECT
v.`id`, v.`date`, v.`quant`, v.`verid`, v.`kunde`, v.`gebracht`, a.`name`, a.`id`
FROM
`verk` v
LEFT JOIN
`loginuser_aqa` a
ON
a.`id` = v.`verid`
WHERE
v.`gebracht` = 0
ORDER BY v.`date`;