即使mysql查询中缺少值,也需要一行

即使mysql查询中缺少值,也需要一行,mysql,Mysql,也许我的谷歌浏览器坏了 我有一张桌子:sub_transfer_jobs job_date mo_id sub_quantity shift_id 2017-05-16 24581 12 1 2017-05-16 86122 8 2 etc. 另一个表格:mo_数字 mo_id customer 24581 cust1 86122 cust2 68515

也许我的谷歌浏览器坏了

我有一张桌子:sub_transfer_jobs

job_date        mo_id     sub_quantity   shift_id
2017-05-16      24581     12             1
2017-05-16      86122     8              2
etc.
另一个表格:mo_数字

mo_id     customer
24581     cust1
86122     cust2
68515     cust1
etc.
我还有一张桌子:日历

This just has a date value for every date
我需要的是每个客户每天的金额字符串列表

范例

2017-05-15   cust1   50
2017-05-15   cust2   0
2017-05-16   cust1   22
2017-05-16   cust2   10
etc
我将得到一个基于日期范围的客户列表

这就是我所在的位置,但子查询有问题

SELECT `sub_transfer_jobs`.`sub_quantity`, `sub_transfer_jobs`.`job_date`, `sub_transfer_jobs`.`shift_id`, `mo_numbers`.`customer`
FROM `sub_transfer_jobs`
join mo_numbers on `mo_numbers`.`mo_id` = `sub_transfer_jobs`.`mo_id`
right join calendar on `calendar`.`datefield` = `sub_transfer_jobs`.`job_date`
right join (
    select DISTINCT `mo_numbers`.`customer` from sub_transfer_jobs
    join `mo_numbers` on `mo_numbers`.`mo_id` = `sub_transfer_jobs`.`mo_id`
    where job_date > '2017-04-15'
) as customerList on customerList.customer = mo_numbers.customer
where job_date > '2017-04-15'
group by `mo_numbers`.`customer`, `sub_transfer_jobs`.`job_date`
编辑:更正sql以获得所需内容(按逗号分隔分组)


您需要使用
交叉联接
来获取客户和日期的所有组合。然后,
LEFT JOIN
使用一个查询来获取每个客户在每个日期的总计

SELECT m.date, c.customer, IFNULL(t.total, 0) AS total
FROM mo_numbers AS m
CROSS JOIN customer AS c
LEFT JOIN (
    SELECT date, mo_id, SUM(quantity) AS total
    FROM mo_numbers
    GROUP BY date, mo_id
) AS t ON m.mo_id = t.mo_id AND c.mo_id = t.mo_id

我不明白结果集如何与试图获得每个客户每天的总数量的数据集相关联。如果客户没有当天的记录,我需要0。我还没有把数量加进去。我这样做是为了看看我是否至少能看到所有的记录,这些表就是你在问题中显示的那些?很难理解它们与您显示的查询之间的关系。更新以反映表名称对于我所需要的不是正确的sql,但是交叉连接是我所需要的。非常感谢。
cust1   0,1857,1262,1166,517,1551,0,0,1469,1670,400,0,0,0,...
cust2   0,123,7,0,7,0,0,0,0,0,0,0,0,0,0,84,70,9,53,3,0,0,4...
cust3   0,0,75,425,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
cust4   0,0,41,36,44,26,0,0,0,41,0,0,0,0,0,16,88,12,0,0,0,...
cust5   0,277,552,433,280,491,0,0,124,880,1269,0,0,0,0,495...
cust6   0,255,124,620,184,129,0,0,309,103,88,0,0,0,0,118,2...
cust7   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,...
cust8   0,209,123,15,84,296,0,0,296,15,262,0,0,0,0,301,200,...
SELECT m.date, c.customer, IFNULL(t.total, 0) AS total
FROM mo_numbers AS m
CROSS JOIN customer AS c
LEFT JOIN (
    SELECT date, mo_id, SUM(quantity) AS total
    FROM mo_numbers
    GROUP BY date, mo_id
) AS t ON m.mo_id = t.mo_id AND c.mo_id = t.mo_id