2016-09-13 19 views
0

私は2つのテーブルを顧客と注文しており、以下はその構造です。MySQL - 2番目のテーブルの最後のレコードを返し、最初のテーブルのすべてを返します。

表 - 連絡先

id 

表 - 受注

id 
contact_id 

はどのように連絡先テーブルからすべて選択するだけordersテーブルから最新のレコードを選択することができますか?

SELECT contacts.*, 
     Max(orders.id) 
FROM contacts 
     LEFT JOIN orders 
       ON contacts.id = orders.contact_id 
GROUP BY contacts.id; 

しかし、私はいつも私がLEFT JOINを使用NULL場合、私はINNER JOINを使用している場合、それが唯一の価値を持って取得します。

答えて

1

をすべての列を追加し、連絡先テーブルからすべての列に最大値を集約するために

select * from orders order by id desc limit 1 
UNION 
select * from contacts 
+0

内部結合を使用して右結合の場合にのみNULL値を返します。 – richersoon

+0

@richersoon、期待される出力を与えることができますか?ここに私のサンプルhttp://rextester.com/RZSB59922 – Prisoner

+0

Apparantenly mysqlは1000を返すように設定されているので、私は他のデータを見ることができません。 – richersoon

1

最新のレコードを選択する機能により、グループの後の連絡先テーブルから

0


のようなUNIONを使用しようとすることができます最初にグループ化してグループ化してください。

select contacts.*, orders.id 
from contacts 
left join (select max(id) as id, contact_id 
      from orders 
      group by contact_id) orders 
    on contacts.id = orders.contact_id 
+0

サンプルは – richersoon

+0

とお聞かせください。すべての列名を関数ごとにグループ化するために入れ子にします。 –

0

私はAlexの回答がうまくいくと信じています。次のクエリは、連絡先のすべてのレコードとordersテーブルの最後のIDをリストします。

SELECT 
    c.*, 
    (SELECT Max(o.id) FROM orders o 
    INNER JOIN contacts c1 ON o.id=c1.id 
    )as last_order_id 
FROM contacts c 
関連する問題