我有一个关于MySQL查询的查询。
我有2个表,其中包含SalesRep详细信息,如姓名,电子邮件等。我有另一个表,其中包含salesDate,客户服务以及通过外键链接到salesrep的销售数据。需要注意的一点是,报告日期总是星期五。
所以要求是这样的:我需要为给定的销售代表列表找到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
现在我怀疑:
有什么办法可以让我在上面的查询中为所有13行填充名称?
如果有2个销售代表,我想使用IN子句,预计总共26行 - 每个销售人员13行(即使没有该人的记录,我&#39 ; d仍然希望看到13行空值),以及3个销售代表的39行
这些可以在MySql中完成吗?如果可以,有人能指出我正确的方向吗?
答案 0 :(得分: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
答案 1 :(得分:0)
您必须进行2级嵌套,在嵌套查询中更改为salesrep的外部联接,因此每个代表至少有1条记录,然后是没有任何条件的星期五加入至少13条记录每个rep,然后是最终右外连接条件(fridays.datefield = innerfriday.datefield和(reportDate为null或reportDate = innerfriday.datefield))
非常低效,尝试在代码中执行此操作,除非是非常小的数据。