2010-06-25 139 views
1

給定condtion我有三個表Orders表和客戶表和orderstatus表,無論是訂單和客戶表都CustomerID作爲共同的領域,秩序和orderstatus已經order_status_id共同領域三個表的連接查詢!下面

客戶表有名字,姓氏,電話和電子郵件地址字段。

現在,如果我必須根據客戶的名字和/或姓氏和/或電話和/或電子郵件和/或orderid搜索/選擇訂單,那麼應該是什麼樣的mysql格式的連接查詢,以便我可以合併所有這三個表從訂單表中獲取結果以及orderstatus表中的orderstatus?

+2

你讓我很興奮的問題的主題! ;-) – richsage 2010-06-25 11:52:36

+0

你看到那叫做市場營銷/廣告/競選 – 2010-06-25 11:53:38

+0

我點擊標題只是爲了看看這裏是否有超級好玩的東西(小丑?馬戲團?)。可能不會。 – 2010-06-25 11:55:54

回答

2

你可以加入表格。根據你當前的數據定義,不需要外部連接或任何東西。

SELECT * 
FROM Orders o, customers c, orderstatus s 
WHERE o.customerid = c.customerid 
AND o.order_status_id = s.order_status_id 
AND c.firstname = 'OM' 
AND c.LASTNAME = 'The Eternity' 
AND o.orderid = 752 
AND ... 
+0

它看起來像你在osCommerce中非常頻繁的工作 – 2010-06-25 12:18:35

1

那麼,我會開始與左加入所有三個表在一起開始。

然後;構建你的where子句來對每個參數這樣的線(基本上,在提供參數的情況下,僅使用過濾器)

WHERE 
(@customerFirstName IS NULL OR @customerFirstName = customers.FirstName) 
AND (@customerLastName IS NULL OR @customerLastName = customers.LastName) 
etc... 

取決於你期望的記錄數;或者如果表現欠佳;你可能想要考慮創建一個表變量來保存更小的數據子集。 (即創建一個#客戶表;然後只插入符合客戶搜索條件的客戶,然後將其添加到其他兩個表中)

讓我知道我是否誤解了您的問題;或者如果你想要任何澄清。

+0

是的,我確實需要你對我的問題有所瞭解嗎?從上面給出的條件我需要訂單表和訂單狀態orderstatus表 – 2010-06-25 12:12:22

+0

嗯;不知道我跟着;但如果你將所有三張桌子結合在一起,您可以將訂單表和訂單狀態表中的數據包含在select子句中。 – 2010-06-25 12:21:19

1

喜歡的東西:

SELECT `orders`.* , 
`orderstatus`.`description`, 
`customers`.`firstname`, `customers`.`lastname`, `customers`.`phone`,`customers`.`email` 
FROM `orders` 
LEFT JOIN `customers` ON `customers`.`id`=`orders`.`customerid` 
LEFT JOIN `orderstatus` ON `orderstatus`.`orderid`=`orders`.`id` 
WHERE `customers`.`lastname`='blogs' 

我不知道你的orderstatus表。