如何解决在内部联接中选择“与所有客户记录完整”
我有两个表,一个与客户,另一个与发票。我需要找到所有在同一期间内具有不同天数发票的客户。
发票表: 帐号 达汀 状态 ...
客户表: 帐号 ...
我有两个问题:
1: 我可以得到拥有一张以上发票的客户,但是我不知道如何检查他们是否是不同的日子。
2: 客户在此查询中显示了多次,而只需要显示一次。
SELECT c.*
FROM Invoice I
INNER JOIN Customer C
ON I.Accountnum= C.Accountnum
WHERE EXISTS(SELECT DISTINCT I.AccountnumFROM Invoice
WHERE C.Accountnum = I.Accountnum
and i.Datein >= '2020-03-01' and i.Datein <= '2020-05-31'
and (IStatus <> 'V' or IStatus IS NULL)
GROUP BY I.Accountnum
HAVING COUNT(*) > 1)
解决方法
您很亲密,但外部查询中没有JOIN
:
SELECT c.*
FROM Customer C
WHERE (SELECT COUNT(*)
FROM Invoice
WHERE C.Accountnum = I.Accountnum AND
i.Datein >= '2020-03-01' and i.Datein <= '2020-05-31' AND
(IStatus <> 'V' or IStatus IS NULL)
) > 1;
请注意,我还更改了子查询的逻辑。子查询返回一个计数,然后将其与1
进行比较,而不是使用EXISTS
。
检查给定客户在两个不同日期是否有发票的简单方法是确保最小发票日期与最大发票日期不同。您可以将其写为join
查询:
select c.*
from customer c
inner join (
select accountnum
from invoice
where
datein >= '2020-03-01' and datein <= '2020-05-31'
and (istatus <> 'V' or istatus is null)
group by accountnum
having min(datein) <> max(datein)
) i on i.accountnum = c.accountnum
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。