如何解决多个联接以排除第二个联接中的第一个联接的结果
我使用Spring JPA。 我有一个交易实体,交易,需要付款。这些付款记录在另一个付款实体PayoutTransaction中。它们与ManyToMany关系链接。有时,付款失败,因此会尝试添加新的PayoutTransaction条目,通常情况下可以。我需要获得支付失败的交易,但排除那些也具有OK支付的失败交易,因为即使第一次尝试失败也已成功支付(它们在PayoutTransaction实体中有另一个状态为OK的条目)。我已经在两个表之间使用多个JOIN进行了尝试,但是即使它们具有确定的支出,它也包含事务。 (我知道这是预期的行为)我该如何解决?
SELECT distinct t FROM Transaction t JOIN t.payoutTransactions p JOIN t.payoutTransactions p2 where p.status = 'FAILED' and NOT p2.status = 'OK'
解决方法
您可以在此处尝试 EXISTS ,
SELECT distinct t FROM Transaction t JOIN t.payoutTransactions p
where p.status = 'FAILED' AND exists (SELECT p2
payoutTransactions p2 where p2.status = p.status and p2.status <> 'OK')
或者您甚至可以编写如下的本机查询
SELECT t.* FROM Transaction t join payoutTransaction p on t.ID = p.ID
where p.status = 'FAILED' AND exists
(SELECT 1 FROM payoutTransaction p2 where p2.status = p.status and p2.status <> 'OK' )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。