数据库包含4个表-费用,月份,客户,发票。
month
(收费期)
id | ttl | year
1 | Jan | 1
2 | Feb | 1
表-
fee
id | ttl | year
1 | Annual | 1
2 | Monthly | 1
3 | Extra | 1
表-
customer
id | ttl | year
1 | Rahul | 1
表-
invoice
(发票列表)
id | cid | fid | mid
1 | 1 | 1 | 1
2 | 1 | 2 | 1
在12个月内,必须按月支付额外费用
每月
.
马上
,在不固定的月份,可以在1月或12月或该月之间的任何月份支付。
现在我的要求是显示发票未准备好的每个月的相关费用(发票表中未列出的每个月的费用名称),简单列出未支付的月份费用。所以我用
LEFT JOIN
NULL
SELECT
customer.id AS cid,
month.id AS mid,
fee.id AS fid,
month.ttl AS mth,
fee.ttl AS fee,
FROM
fee
LEFT JOIN
month ON month.year = fee.year
LEFT JOIN
customer ON customer.year = fee.year
LEFT JOIN
invoice ON invoice.mid = month.id AND invoice.fid = fee.id
WHERE
customer.id=1 AND invoice.fid IS NULL
结果是-
cid | mid | fid | mth | fee
1 | 1 | 3 | Jan | Extra
1 | 2 | 1 | Feb | Annual
1 | 2 | 2 | Feb | Monthly
1 | 2 | 3 | Feb | Extra
但是,我想要的是——正如我上面所说的,年费只付一次,所以如果发票上有年费,就把这个排除在外,如果不包括在内,得到以下结果
cid | mid | fid | mth | fee
1 | 1 | 3 | Jan | Extra
1 | 2 | 2 | Feb | Monthly
1 | 2 | 3 | Feb | Extra
因为一月份已经交了年费。
WHERE
customer.id=1
AND
invoice.fid IS NULL
AND
NOT EXISTS (select invoice.fid from invoice where invoice.fid = 1 AND invoice.cid=customer.id)
但是MySQL返回了一个空的结果集