spring-boot - 多重联接以排除第二个联接中的第一个联接的结果
问题描述
我使用 Spring JPA。我有一个需要支付的交易实体 Transaction。这些支出记录在另一个支出实体 PayoutTransaction 中。它们与多对多关系相关联。有时支付失败,他们会重新尝试添加一个新的 PayoutTransaction 条目,这通常是可以的。我需要获取支付失败的交易,但不包括那些支付成功的失败交易,因为即使第一次尝试失败,它们也已成功支付(他们在 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' )
推荐阅读
- ios - 有没有办法改变集合视图中的焦点索引路径?
- c++ - 如何在 C++ 中将整数转换为字符
- r - dplyr::rename_all & dplyr::if_else
- google-assistant-sdk - 是否可以为 Google Home Hub 创建自定义信息亭应用?
- python - Python:检查 ConfigParser 键是否不为空
- javascript - 如何将 shap 值 forceplot 发送到 html 中的 iframe?
- java - Java的HttpURLConnection.connect()在什么情况下会抛出ConnectionException?
- javascript - 在我的反应组件中实现编辑功能的最佳方法
- python - Pandas / Anaconda 中的复古/静态池分析
- android - 如何从 Android 中的缩放视图中获取位图