sql左边连接2个表

时间:2012-01-05 09:25:55

标签: sql left-join database-table

我有一个带左连接的SQL查询,工作正常:

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 - 不唯一的表/别名:'购买'

如何修改第一个从购买表中获取数据的请求呢?

2 个答案:

答案 0 :(得分:3)

你的第一个陈述几乎就是你想要的,你只需要在SELECT中命名,你想从购买表中返回哪些字段。

e.g。

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中列出“购买” - 因为您有,这就是您看到错误的原因。

答案 1 :(得分: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;