2012-01-05 95 views
2

我有一个左一个SQL查询中的连接工作正常:SQL左连接2台

SELECT book.* FROM book 
LEFT JOIN purchase ON book.book_id = purchase.book_id 
WHERE purchase.user_id = 3 
ORDER BY purchase.purchase_date 

但我也需要从进货表的相关信息,所以我尝试:

SELECT purchase.*, book.* 
FROM purchase, book 
LEFT JOIN purchase ON book.book_id = purchase.book_id 
WHERE purchase.user_id = 3 
ORDER BY purchase.purchase_date 

但没有工作,我有这个错误消息:#1066 - 不唯一的表/别名:'购买'

我怎么能修改第一个请求从购买表中获取数据呢?

+0

为什么不使用'SELECT * FROM [...]' – rabudde 2012-01-05 09:29:08

+1

在你的第二个查询中,你尝试加入表'purchase'两次。但是如果你这样做了,那么这两个表都必须用一个别名来命名 – rabudde 2012-01-05 09:30:18

+0

为什么你在原始查询中有一个左连接? WHERE子句将把它变成一个内部连接。 – 2012-01-05 09:56:01

回答

3

您的第一条语句几乎完全符合您的要求,您只需在SELECT中命名,您希望从购买表中返回哪些字段。

例如

SELECT book.*, purchase.user_id 
FROM book 
    LEFT JOIN purchase ON book.book_id = purchase.book_id 
WHERE purchase.user_id = 3 
ORDER BY purchase.purchase_date 

你并不需要在列出“购买” FROM子句以及在JOIN - 因为你,这就是为什么你看到的错误。

3

您不需要参考FROM子句中的purchase表 - 这意味着您既是交叉连接的图书,又是购买表,然后再次加入购买表。因为purchase表有两个实例,所以它们需要具有唯一的别名 - 因此是错误。你可能只是需要这个:

SELECT purchase.*, book.* 
    FROM purchase LEFT JOIN purchase ON book.book_id = purchase.book_id 
WHERE purchase.user_id = 3 ORDER BY purchase.purchase_date;