'field list' 连接中的未知列“..”
Unknown column '..' in 'field list' join
我用 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;
错误:
Unknown column 'verk.id' in 'field list'
在 rextester 上提供了一个演示:
http://rextester.com/HDTJAA39589
我已经尝试将“verk
”从 verk.id
中移开,但随后出现另一个错误:
id is ambiguous..
您用反引号将整个内容括起来。
而不是:
`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`;
您在此查询中至少有两个问题。
首先,当您使用back-ticks分隔标识符时,您必须将table别名与列名分开分隔。
`verk.id` -- WRONG
`verk`.`id` -- CORRECT
原因是SQL实际上允许你定义包含标点、白色space等的列名,如果你分隔列名的话。这就是您似乎正在做的事情,请求一个名为 verk.id
的列
verk.id -- ALSO CORRECT
正如其他人评论的那样,您通常根本不需要使用定界标识符。如果您的标识符与 MySQL Reserved Words 冲突,或者如果您需要使用标点符号、白色 space 或国际字符,请使用它们。
第二个问题是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
的 table 别名。
当您定义 table 别名时,您 必须 对属于该 table 的任何列使用 table 别名。您不能再将列引用为 verk.id
,您必须使用 FULL.id
。这部分是标准 SQL 行为,不是 MySQL 错误。
另一个问题是您在查询结果中没有得到 FULL OUTER JOIN
,您只是得到一个普通的 JOIN
,它是 INNER JOIN
的同义词。没有错误,但如果您需要完全外部联接,您将无法获得预期的结果。
我在 2013 年报告了 MySQL 不支持 FULL
作为保留字的问题: https://bugs.mysql.com/bug.php?id=69858 如果您愿意,可以通过登录将您的投票添加到错误的优先级并单击该页面上的 "Affects me" 按钮。
如果您需要在 MySQL 中执行 FULL OUTER JOIN
,则必须使用变通方法。请参阅此处的示例:Full Outer Join in MySQL
我用 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;
错误:
Unknown column 'verk.id' in 'field list'
在 rextester 上提供了一个演示:
http://rextester.com/HDTJAA39589
我已经尝试将“verk
”从 verk.id
中移开,但随后出现另一个错误:
id is ambiguous..
您用反引号将整个内容括起来。
而不是:
`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`;
您在此查询中至少有两个问题。
首先,当您使用back-ticks分隔标识符时,您必须将table别名与列名分开分隔。
`verk.id` -- WRONG
`verk`.`id` -- CORRECT
原因是SQL实际上允许你定义包含标点、白色space等的列名,如果你分隔列名的话。这就是您似乎正在做的事情,请求一个名为 verk.id
verk.id -- ALSO CORRECT
正如其他人评论的那样,您通常根本不需要使用定界标识符。如果您的标识符与 MySQL Reserved Words 冲突,或者如果您需要使用标点符号、白色 space 或国际字符,请使用它们。
第二个问题是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
的 table 别名。
当您定义 table 别名时,您 必须 对属于该 table 的任何列使用 table 别名。您不能再将列引用为 verk.id
,您必须使用 FULL.id
。这部分是标准 SQL 行为,不是 MySQL 错误。
另一个问题是您在查询结果中没有得到 FULL OUTER JOIN
,您只是得到一个普通的 JOIN
,它是 INNER JOIN
的同义词。没有错误,但如果您需要完全外部联接,您将无法获得预期的结果。
我在 2013 年报告了 MySQL 不支持 FULL
作为保留字的问题: https://bugs.mysql.com/bug.php?id=69858 如果您愿意,可以通过登录将您的投票添加到错误的优先级并单击该页面上的 "Affects me" 按钮。
如果您需要在 MySQL 中执行 FULL OUTER JOIN
,则必须使用变通方法。请参阅此处的示例:Full Outer Join in MySQL