2014-12-03 41 views
0

我有一個關於MySQL中的查詢的查詢。MySQL的右外聯接查詢

我通過外鍵包含SalesRep的詳細信息,如姓名,電子郵件等我與它有reportDate銷售數據的另一個表,客戶服務和鏈接指向SalesRep 2個表之一。有一點需要注意的是reportDate總是一個星期五。

所以要求是這樣的:我需要找到一個13周的時間對銷售代表的定列表的銷售數據 - 以0爲客戶提供服務,如果在一個特定的週五沒有數據。查詢結果由Java應用程序使用,該應用程序依賴於每個銷售代表的13行數據。

我創建了一個表,所有的週五日期填寫並寫了外部聯接象下面這樣:

select * from (
     select name, customersServed, reportDate 
     from Sales_Data salesData 
     join `SALES_REPRESENTATIVE` salesRep on salesRep.`employeeId` = salesData.`employeeId` 
     where employeeId = 1 
    ) as result 
    right outer join fridays on fridays.datefield = reportDate 
    where fridays.datefield between '2014-10-01' and '2014-12-31' 
    order by datefield 

enter image description here

現在我的疑惑:

  • 有什麼辦法我可以在上面的查詢中獲得所有13行的填充名稱?

  • 如果有兩個銷售代表,我想使用一個IN子句,總共有26行 - 每個銷售人員13行(即使沒有該人的記錄,我仍然希望見第13行空的),和39 3個的銷售代表

難道這MySql中完成,並且如果是這樣,任何人都可以點我在正確的方向?

+0

你試過從查詢中刪除此:'其中僱員= 1'?或者這樣做:'where employeeId IN(1,2)'? – 2014-12-03 10:32:42

+0

試過,但有一個正確的外連接,我不會得到26行(每個銷售代表一個)。上面發佈的查詢只是爲了獲得所有13個星期五的一個用戶的名字和0。 – prabugp 2014-12-03 10:38:41

+0

如果你喜歡,可以考慮下列行爲這個簡單的兩步過程:1.如果您還沒有這樣做,提供適當的DDL(和/或sqlfiddle),這樣我們可以更容易複製的問題。 2.如果您還沒有這樣做,提供與在步驟1提供 – Strawberry 2014-12-03 11:02:17

回答

2

您必須先選擇線(不customersServed),然後作出一個外連接的customerServed

類似的東西:

select records.name, records.datefield, IFNULL(salesRep.customersServed,0) 
from (
     select employeeId, name, datefield 
     from `SALES_REPRESENTATIVE`, fridays 
     where fridays.datefield between '2014-10-01' and '2014-12-31' 
     and employeeId in (...) 
    ) as records 
    left outer join `Sales_Data` salesData on (salesData.employeeId = records.employeeId and salesData.reportDate = records.datefield) 
    order by records.name, records.datefield 
+0

我知道這是10天后..但我把你的想法去與它有一些修改,並得到它的工作。訣竅在我用來與星期五交叉的桌子上。來到這裏只是爲了標記這個答案。 – prabugp 2014-12-11 13:21:33

+0

非常感謝 – syllabus 2014-12-11 13:31:47

0

你必須做2級嵌套,在你的嵌套查詢中更改爲外部連接for salesrep,所以每個代表至少有1條記錄,然後與沒有任何條件的星期五的連接每條記錄至少有13條記錄(fridays.datefield = innerfriday.datefield和(reportDate爲null或reportDate = innerfriday.datefield))最後的右外部連接)

效率非常低,請嘗試在除非常小的數據外的代碼中執行此操作。

+0

感謝您的答覆,但外部連接的銷售代表是不需要的信息與期望的結果集,因爲我永遠知道哪些銷售代表查詢。而當我們進行交叉連接時,我們不會有空的reportDate,而且我們的表沒有任何銷售代表的空reportDate。但我會延長你的方法,看看是否能讓我獲得任何地方。 – prabugp 2014-12-03 10:52:58