mysql中on子句错误中的未知列

mysql中on子句错误中的未知列,mysql,Mysql,我有两张桌子: mysql> select * FROM borrower; +--------+------------+---------+--------------+ | cardno | name | address | phone | +--------+------------+---------+--------------+ | 1 | A | nj,usa | 111-222-333 | | 2 | B

我有两张桌子:

mysql> select * FROM borrower;
+--------+------------+---------+--------------+
| cardno | name       | address | phone        |
+--------+------------+---------+--------------+
|      1 | A          | nj,usa  | 111-222-333 |
|      2 | B          | NY,USA  | 444-555-666 |
|      3 | C          | nj,usa  | 777-888-999 |
+--------+------------+---------+--------------+
3 rows in set (0.00 sec)

mysql> select * FROM bookloans;
+--------+----------+--------+------------+------------+
| bookid | branchid | cardno | dateout    | duedate    |
+--------+----------+--------+------------+------------+
|      1 |        1 |      1 | 2014-04-01 | 2014-08-01 |
+--------+----------+--------+------------+------------+
1 row in set (0.00 sec)
bookloans中的cardno是借款人中cardno的外键。C

现在我尝试执行以下SQL查询:

mysql> select name,address from borrower full join bookloans
  on bookloans.cardno = borrower.cardno
  group by cardno having count(bookid)=0;
ERROR 1054 (42S22): Unknown column 'borrower.cardno' in 'on clause'
我不理解这个错误,因为借贷者表有一个名为cardno的列。知道我做错了什么吗

谢谢,
Sunil

MySQL不支持
完全连接
语法。因此,此查询中的单词
full
被解释为表别名,就好像您执行了如下查询:

... FROM borrower AS `full`
    JOIN bookloans ...
随后,当您引用
借款人.cardno
时,它会感到困惑,因为它认为您希望使用别名
full
来引用借款人表

我知道这是MySQL解析器中一个非常愚蠢的错误。我记录了一个关于它的bug()。你应该在那个bug上点击“影响我”


请回复您的评论:

在MySQL中执行完全外部联接的常用方法是:

SELECT ...
FROM borrower LEFT OUTER JOIN bookloans USING (cardno)
UNION
SELECT ...
FROM borrower RIGHT OUTER JOIN bookloans USING (cardno)
然而,在你的例子中,我认为你实际上不需要一个完整的外部连接。您使用的是
按计数分组(bookid)=0
,因此您似乎在寻找bookloans中没有匹配行的左外部联接:

SELECT name, address FROM borrower
LEFT OUTER JOIN bookloans USING (cardno)
WHERE bookloans.cardno IS NULL;

所以在mysql中没有完全连接的方法?