Spring boot 多个联接以排除第一个联接中与第二个联接中的结果

Spring boot 多个联接以排除第一个联接中与第二个联接中的结果,spring-boot,jpa,spring-data-jpa,Spring Boot,Jpa,Spring Data Jpa,我使用SpringJPA。 我有一个交易实体,交易,需要支付。这些支出记录在另一个支出实体PayoutTransaction中。他们有着千丝万缕的联系。有时,支付失败,会重新尝试添加一个新的PayoutTransaction条目,这通常是正常的。我需要获得支付失败的交易,但不包括那些也有正常支付的失败交易,因为即使第一次尝试失败,它们也已成功支付。它们在PayoutTransaction实体中有另一个状态为OK的条目。我尝试了两个表之间的多重连接,但它包括事务,即使它们有一个OK支付。我知道,这

我使用SpringJPA。 我有一个交易实体,交易,需要支付。这些支出记录在另一个支出实体PayoutTransaction中。他们有着千丝万缕的联系。有时,支付失败,会重新尝试添加一个新的PayoutTransaction条目,这通常是正常的。我需要获得支付失败的交易,但不包括那些也有正常支付的失败交易,因为即使第一次尝试失败,它们也已成功支付。它们在PayoutTransaction实体中有另一个状态为OK的条目。我尝试了两个表之间的多重连接,但它包括事务,即使它们有一个OK支付。我知道,这是预期的行为,我如何解决这个问题

SELECT distinct t FROM Transaction t JOIN t.payoutTransactions p JOIN t.payoutTransactions p2 where p.status = 'FAILED' and NOT 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' )

你好@Govind。这不应该也不存在吗。。。如果我想获得失败的付款,那么没有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' )