我需要sql幫助查詢: 我想創建一個視圖來列出一個商店的客戶。這是選擇了一個或多個預訂(表預訂)或已經完成一個或多個預訂(餐桌shop_orders)的用戶表。查詢列出一個商店的客戶,有兩個不同的訂單表
------------- --------------
| users: | | shops: |
------------- --------------
| id (PK) | | id (PK) |
------------- --------------
------------------ ----------------
| reservations: | | shops_orders:|
------------------ ----------------
| id (PK) | | id (PK) |
| user_id (FK) | | user_id (FK) |
| shop_id (FK) | | shop_id (FK) |
------------------ ----------------
這是我的出發點工作確定:
SELECT u.*,
r.shop_id,
(SELECT count(*)
FROM reservations r
WHERE r.user_id = u.id) AS num_reservations,
(SELECT count(*)
FROM shop_orders so
WHERE so.user_id = u.id) AS num_orders
FROM users u
INNER JOIN (SELECT r.user_id,
r.shop_id
FROM reservations r
UNION
SELECT so.user_id,
so.shop_id
FROM shop_orders so) AS r ON u.id = r.user_id
GROUP BY u.id
所有查詢這一觀點將被shop_id進行過濾,只顯示一個具體店鋪的客戶(被店鋪管理區域) 。
且只有已經預訂或訂單客戶選擇(num_reservations> 0或NUM_ORDERS> 0)
我覺得這個問題是性能:從整個表2個計數(*)。還有這兩個整個表格之間的聯合。
您是否認爲我可以測試更好的替代方法?
什麼是樣本數據和期望的輸出? – 2013-04-21 10:09:12