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 ответа:
Ваше 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;