2013-08-21 64 views
0

我有2個表用戶和訂單,我要得到用戶和他的訂單數Mysql的模擬FULL OUTER JOIN

SELECT `users`.*, `orders`.*,count(*) FROM `users` LEFT JOIN orders ON 
`users`.`id` = `orders`.`user_id` 
UNION SELECT `users`.*, `orders`.*,count(*) FROM users 
RIGHT JOIN orders ON `users`.`id` = `orders`.`user_id` 

此查詢選擇用戶並有秩序用戶的順序數,但是不選擇用戶誰不有訂單。

我想獲得

user orders 
John 5 
Thomas 0 
Mike 8 

我能得到什麼

user orders 
John 5 
Mike 8 

如何獲得用戶也誰沒有訂單怎麼辦?

+0

如果你只想'用戶'和'訂單'列爲什麼要做一個'SELECT *'? –

+0

@Declan_K好,但它不是我想的問題 – Wizard

回答

2

下面的查詢會給你的所有用戶的名單和他們的訂單數,如果該用戶沒有訂單,則包括0。

另外,你確定ORDER_ID是用戶表的FK嗎?這似乎與我相反...

SELECT U.NAME 
     ,COUNT(O.ORDER_ID) 
FROM USERS U 
LEFT OUTER JOIN 
     ORDERS O 
ON  U.ID = O.ORDER_ID 
GROUP BY 
     U.NAME 
3

您不需要完整的外連接。左外連接應該罰款,假設所有的orders表用戶有一個有效的參考users表:

SELECT u.*, count(o.user_id) 
FROM `users` u LEFT JOIN 
     orders o 
     ON u.`id` = o.`user_id` 
group by u.id