顧客と注文の2つのテーブルがあります。構造は次のとおりです。
表-顧客
表-注文
customersテーブルには顧客レコードがあり、Ordersテーブルには顧客による注文があり、
注文テーブルのcustomer_idは、顧客テーブルのidフィールドにリンクされています。
これで、1人の顧客が注文をゼロまたは1つ以上持つことができます。最後に注文したのは顧客のみです。
次のクエリを実行すると、単純な非表示の結合で、顧客によるすべての注文が返されます
SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id
別のJOINステートメントも試しましたが、顧客による最後の注文を取得できません。すべての顧客に対して1つのSQLクエリで取得したいと考えています。
よろしくお願いします。
このクエリを試してください
_SELECT
c.customer_name,
max(o.order_id)
FROM
customers c
INNER JOIN
orders o
ON
o.customer_id = c.id
GROUP BY
c.customer_name
_
注文テーブルに日付フィールドがないため、最新の注文はmax(order_id)
の注文であると想定します。
MySQLでは、それを機能させるためのいくつかの方法があります(私が実際に)。 1つ目は、テーブルをdesc
の前にjoin
として並べ替えます。
SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c
INNER JOIN orders o
ON o.id = (SELECT id FROM orders WHERE customer_id = c.id ORDER BY id DESC LIMIT 1)
リアルタイムで使用することがそれを実現する唯一の方法ですが、リアルタイムではなく結合を行う必要がある場合は、次のように、一時テーブルまたはエイリアステーブルを作成して、選択を行うことができます。
CREATE TABLE tmp_your_table AS
SELECT * FROM orders ORDER BY id DESC
これで、この結合を機能させることができます。
SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c
INNER JOIN tmp_your_table o ON o.id = tmp_your_table.id