2016-09-13 17 views
0

我有兩個表客戶和訂單,下面是結構。MySQL - 返回第二張表上的最後一條記錄,然後返回第一個表中的所有條目

表 - 接觸

id 

表 - 訂單

id 
contact_id 

如何從聯繫人表中選擇所有,但只能選擇從訂單表的最新記錄?

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

但我總是得到NULL如果我使用LEFT JOIN,它只是如果我使用INNER JOIN纔有價值。

回答

1

選擇最新記錄在訂單和它第一組

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

仍然返回NULL,只有在使用內部連接和右側連接時纔有值 – richersoon

+0

@richersoon,您能否給我們預期的輸出?這裏是我的示例http://rextester.com/RZSB59922 – Prisoner

+0

只能配置mysql返回1000,所以我無法看到其他數據。 – richersoon

1

你可以試着組後使用UNION像

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


爲了聚集與聯繫人表中的所有列的最大值,添加的所有列從聯繫人表按功能

+0

可以請你給我樣品 – richersoon

+0

雅確定。將所有列名稱嵌套到組中按功能 –

0

我相信Alex提供的答案應該很好。以下查詢應列出來自聯繫人的所有記錄和訂單表中的最後一個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 
相關問題