2012-01-05 58 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;