我有一个clientlist表,一个payments表和一个calls表
我想返回一个由clientlist表的大部分组成的行,最后一次付款的日期和金额,以及最后一次通话的日期。
我写了一个查询,几乎(所以一点也不)起作用。。只要联接表上存在支付和调用,它就可以正常工作。如果其中一个不存在,则查询不返回行。
我想要的是客户数据返回无论付款和通话数据。
SELECT clientlist.ID, clientlist.FirstName, clientlist.LastName, clientlist.`Herd Number`, clientlist.Address1, clientlist.Address2, clientlist.Address3, clientlist.County,
clientlist.postcode, clientlist.Mobile, clientlist.AuditDue AS `Cert Expiry`,p1.dateofpayment,p1.amt ,c1.dateofcall, a1.link,a1.dateOfAudit
FROM agritxtdev.clientlist left join payments p1
on clientlist.ID=p1.clientnum
left join calls c1
on clientlist.id= c1.clientnum left join auditdate a1 on a1.client = clientlist.id
where p1.id = (Select MAX(id) from payments p2 where p1.clientnum=p2.clientnum)
AND c1.id= (Select MAX(id) from calls c2 where c1.clientnum=c2.clientnum)
order by clientlist.ID
我真的很感激你能给我的任何帮助。
我相当肯定我的问题在这里,但我迷失了另一种方法
where p1.id = (Select MAX(id) from payments p2 where p1.clientnum=p2.clientnum)
AND c1.id= (Select MAX(id) from calls c2 where c1.clientnum=c2.clientnum)
提前谢谢彼得
2条答案
按热度按时间slsn1g291#
事实上,问题出在
where
条款。基本上你需要把它们移到on
相应联接的子句。否则,条件是必需的,并筛选出left join
不匹配:9avjhtql2#
我建议改变方法,这不仅是你的问题,也是一个非常浪费的过程。
试试这个: