我有两张表:
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
发布于 2014-07-05 08:20:20
MySQL不支持full join语法。因此,此查询中的单词full被解释为表别名,就好像您执行了如下查询:
... FROM borrower AS `full`
JOIN bookloans ...然后,当您随后引用borrower.cardno时,它会感到困惑,因为它认为您希望使用别名full引用借款人表。
我知道这是MySQL解析器中的一个非常愚蠢的错误。我记录了一个关于它的bug (http://bugs.mysql.com/bug.php?id=69858)。你应该在那个bug上点击“影响我”。
请回复您的评论:
在MySQL中执行完全外连接的常见方法是:
SELECT ...
FROM borrower LEFT OUTER JOIN bookloans USING (cardno)
UNION
SELECT ...
FROM borrower RIGHT OUTER JOIN bookloans USING (cardno)但是,在您的情况下,我不认为您实际上需要一个完整的外部连接。您使用的是GROUP BY COUNT(bookid) = 0,所以您似乎在寻找一个在bookloans中没有匹配行的左外部连接:
SELECT name, address FROM borrower
LEFT OUTER JOIN bookloans USING (cardno)
WHERE bookloans.cardno IS NULL;https://stackoverflow.com/questions/24581863
复制相似问题