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-一意ではないテーブル/エイリアス:'購入'

購入テーブルからデータを取得するように最初のリクエストを変更するにはどうすればよいですか?

4

2 に答える 2

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に「購入」をリストする必要はありません。そうしているので、エラーが表示されます。

于 2012-01-05T09:27:42.373 に答える
3

FROM句のテーブルを参照する必要はありませんpurchase。つまり、本と購入テーブルの両方を相互結合してから、購入テーブルに再度参加することになります。テーブルには2つのインスタンスがあるため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;
于 2012-01-05T09:30:01.660 に答える