sql left join 2 таблицы


У меня есть 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 2

2 ответа:

Ваше 1-е утверждение было почти точно таким, как вы хотите, вам просто нужно назвать в 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, а также в соединении - потому что у вас есть, вот почему вы видите ошибку.

Вам не нужно ссылаться на таблицу purchase в предложении FROM - это будет означать, что вы одновременно соединяете таблицы book и purchase, а затем снова соединяете таблицу 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;