2013-05-28 17 views
15

私は2つのテーブルを顧客と注文があり、以下はその構造です。MySQL - 最初のテーブルと一致する2番目のテーブルの最後のレコードを選択

表 - 顧客

  • ID
  • CUSTOMER_NAME

表 - 注文

  • ID
  • ORDER_ID
  • CUSTOMER_ID

顧客テーブルの顧客レコードと注文テーブルは、顧客からの注文を持って、

は、顧客テーブルのIDフィールドにリンクされている受注テーブルにをCUSTOMER_IDています。

1人の顧客がゼロまたは1つ以上の注文を持つことができます。顧客が最後に注文した注文を受け取りたいと思います。私は、単純な目に見えないが、参加次のクエリを実行すると

が、それは私も文を登録しようが、顧客によって最後の順序を取得することはできません異なる試してみましたが、顧客

SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id 

ですべての注文を返し、私はしたいですすべての顧客のための1つのSQLクエリでそれを入手してください。

ご協力いただきありがとうございます。

答えて

11

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)を持っているものになると仮定すると、注文テーブル内の任意の日付フィールドを持っていません。

+1

は、あなたの迅速な応答をありがとうorder_idがランダムであれば動作しませんが、これは私が探しているものに最も近いものです。 – Alyas

+4

私はそれを以下のように解決しました。 'SELECT c.customer_name、o.customer_id、o.order_id、o.id FROM customers c INNER JOINオーダーo.id = (SELECT id FROM orders WHERE customer_id = c.id ORDER BY id DESC LIMIT 1 ) ' – Alyas

+0

はい、order_idがランダムな場合は動作しません。その後、order_dateを取得して最新の注文を見つけることができる日付フィールドを持つ必要があります。 – Meherzad

-1

はそれを動作させるために、単にいくつかの方法(私は今、実際に)があり、このクエリをMySQLで

SELECT 
    c.customer_name, 
    o.order_id 
FROM 
    customers c 
INNER JOIN 
    orders o 
ON 
    o.customer_id = c.id 
ORDER BY 
    o.id desc 
LIMIT 1; 
+0

これは、顧客の最後の注文情報を必要としながら、顧客の最後の注文情報を返します。 – Alyas

18

を試してみてください。一つ目は、ソートjoindescとしてあなたのテーブルです:リアルタイムで使用

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 
+0

この部分は、私のクエリ 'INNER JOIN orders o ON O.id =(SELECT id FROM orders where customer_id = c.id ORDER BY id DESC LIMIT 1) ' – FosAvance

+0

のお手伝いをしてくれました。 – FosAvance

関連する問題