我有一个带左连接的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 - 不唯一的表/别名:'购买'
如何修改第一个从购买表中获取数据的请求呢?
答案 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;