【发布时间】:2014-12-03 10:14:27
【问题描述】:
我有一个关于 MySQL 中的查询的查询。
我有 2 个表,其中一个包含 SalesRep 详细信息,例如姓名、电子邮件等。我还有另一个表,其中包含具有报告日期、服务的客户和通过外键链接到 salesrep 的销售数据。需要注意的一点是,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
现在我的疑惑:
有什么方法可以让我为上述查询中的所有 13 行填充名称?
如果有 2 名销售代表,我想使用 IN 子句并预计总共 26 行 - 每个销售人员 13 行(即使没有该人的记录,我仍然希望看到 13 行空值),对于 3 位销售代表看到 39 行
这些可以在 MySql 中完成吗?如果可以,谁能指出我正确的方向?
【问题讨论】:
-
您是否尝试将其从查询中删除:
where employeeId = 1?或者这样做:where employeeId IN (1,2)? -
试过了,但使用右外连接,我不会得到 26 行(每个销售代表一个)。上面发布的查询只是为了获取一个用户在所有 13 个星期五的名称和 0。
-
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
标签: mysql sql outer-join