-2

私の課題は 2 時間以内に完了する必要があり、今夜提出する別の保留中の課題があるため、さらに調査を行う時間がないため、これが簡単に思えるかもしれませんが、事前にお詫び申し上げます。私は基本的なMYSQLコマンドしか知りません。これらのタイプは知りません。そして、これは未回答のまま残された最後の質問の 1 つであり、JOIN のドキュメントを既に読んでいても、気が狂いそうになります。助けてください。

4つのテーブルがあるとします

 _______________     _______________      _______________    _______________
|   customers   |   |     orders    |    | ordered_items |  |   products    |
|_______________|   |_______________|    |_______________|  |_______________|
|(pk)customer_id|   | (pk)order_id  |    |   (pk)id      |  |(pk)product_id |
|  first_name   |   |(fk)customer_id|    | (fk)order_id  |  |     name      |
|  last_name    |   |     date      |    |(fk)product_id |  |  description  |
|   contact_no  |   |               |    |    quantity   |  |     price     |
|_______________|   |_______________|    |_______________|  |_______________|      

注文したすべての製品を照会するにはどうすればよいでしょうか (例: customer_id = '5')

1 つのテーブルに対する単純なクエリと 2 つの異なるテーブルからの結合などの基本的な SQL しか知りませんが、4 つの異なるテーブルが互いに異なる関係を持っているため、特定の顧客 ID で注文されたすべての製品を取得するにはどうすればよいでしょうか?

order_id = (* orders by customer_id = 5) の注文商品からすべての商品を取得するようなものです。

しかし、このタイプのクエリを実行する際に最適化されたベストプラクティスの方法は何ですか

4

2 に答える 2

1

ordersorder_items、およびの3 つのテーブルを結合するだけで済みますproducts

SELECT DISTINCT products.*
FROM products
JOIN order_items USING (product_id)
JOIN orders USING (order_id)
WHERE orders.customer_id = 35

多くの人が言及しているように、テーブルJOINSについて学ぶことで、自分自身に大きな恩恵をもたらすでしょう。2 つのテーブルを結合する場合と 4 つ以上のテーブルを結合する場合では、構文に大きな違いはありません。

SQLFiddleは、クエリの練習と共有に強く推奨されるリソースです。

于 2013-06-20T20:51:44.903 に答える
1

これは、SQL を初めて使用するように思われるためのコメントです。クエリの基本的な構文を学ぶ必要があります (これが、反対票を投じている理由です)。

しかし、あなたはフォームについても尋ねます。データ構造は、実際にはかなりうまくレイアウトされています。私は2つのコメントがあります。まず、id 列の名前の付け方に一貫性を持たせる必要があります。の場合Ordered_Items、ID は である必要がありますordered_item_id

次に、列名とテーブル名に SQL の特殊語を使用しないようにする必要があります。の代わりにdate、 を使用しますOrderDate

于 2013-06-20T20:53:12.857 に答える