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的列。知道我做错了什么吗
谢谢,
SunilMySQL不支持
完全连接
语法。因此,此查询中的单词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中没有完全连接的方法?