我有银行数据库的这种关系模式

Customer(custid PK, name, city, streetaddr, province)

Account(acctid PK, custid, atype, startdate, balance, branchid), (custid ref Customer, branchid ref Branch)

Branch(branchid PK, mgrid, city, streetaddr, province), (mgrid ref Employees.empid)

Employees(empid PK, name, branchid, salary, city, streetaddr, province), (branchid ref Branch)

Transactions(tid PK, acctid, transtype, transdate, transamount, branchid) (acctid ref Account, branchid ref Branch)



  我正在尝试查找今年仅进行过一次交易的客户的所有“储蓄”帐户ID,客户名称和客户ID


显然,我需要使用事务,帐户和客户表。我加入了带有交易的帐户,以查看进行了一个或多个交易的所有帐户,但是在查找“仅一个”交易的规范时遇到了麻烦。我觉得我需要使用集合差异,但仍然无法彻底思考。

最佳答案

可能是这样的:

select a.acctid, c.custid, c.name
from account a
inner join (
    select acctid
    from transactions
    where year(transdate) = year(curdate())
    group by acctid
    having count(tid) = 1
) t on a.acctid = t.acctid
inner join customer c
on a.custid = c.custid
where a.atype = 'savings';

10-05 19:29