我正在尝试使用 where 子句对 3 个表进行左连接,但无法正常工作。
我的桌子是:
sale:
sale_id (int)
terminal_id (int)
zread_id (int)
... more fields about total amounts, dates times etc
sale_payment:
payment_id (int)
sale_id (int)
payment_type (enum: 'P','W','A')
method_id (int)
payment_amount (Decimal)
sale_writeoff_method:
method_id (int)
description (varchar)
display_order (int)
销售可以通过 3 种不同的方式完成(支付)(因此是枚举)实物支付 - 现金、支票等,“注销”支付 - 库存以成本价(即浪费、赠品等)或账户 -客户信用等
在销售期结束时(一天结束),用户进行 Z-Read 收集所有发生的交易并生成报告,然后用户必须平衡抽屉中的现金等。当我创建初始 Z-Read 对象,我可以使用查询收集我需要的信息:
SELECT m.method_id, m.description, SUM(s.sale_total) as z_total, COUNT(s.sale_id) as total_sales
FROM sale_writeoff_method m
LEFT JOIN sale_payment p ON m.method_id = p.method_id
LEFT JOIN sale s ON s.sale_id = p.sale_id
WHERE s.zread_id IS NULL
AND (p.payment_type = 'W' OR p.payment_type IS NULL)
AND (s.terminal_id = ? OR s.terminal_id IS NULL)
GROUP BY p.payment_type, m.method_id
ORDER BY m.display_order;
一旦一切都平衡并最终确定,销售表中所有类型的所有收集的销售都将使用插入此对象产生的 zread_id 进行标记。
现在我的问题是,当我将来需要重新创建 z-read 对象时,例如重新打印报告,我无法显示所有的方法 ID 和描述 - 我一直在使用的查询是:
SELECT m.method_id, m.description, SUM(s.sale_total) as z_total, COUNT(s.sale_id) as total_sales
FROM sale_writeoff_method m
LEFT JOIN sale_payment p ON m.method_id = p.method_id
LEFT JOIN sale s ON s.sale_id = p.sale_id
WHERE s.zread_id = 1
AND (p.payment_type = 'W' OR p.payment_type IS NULL)
GROUP BY p.payment_type, m.method_id
ORDER BY m.display_order;
But it only displays methods that had sales attached for that Z-Read period. I can't use WHERE s.zread_id IS NULL because that will include all the sales that haven't been finalised yet.
任何建议将不胜感激!