我找不到使用多个这样的 where 子句是否有效(我使用 JPA、MySQL)我需要多个 where 子句,其中一个在这里将是“not”,或者我错过了什么?
select d from T_DEBIT d where d.status=PENDING and
where not exists (
select r
from T_REQUEST r
where
r.debit.id = d.id and
r.status = SUCCESSFUL
)
请询问您是否需要更多信息,
JPA 提供对子查询的支持。 见规格
子查询可以用在 WHERE 或 HAVING 子句中。子查询的语法如下:
subquery ::= simple_select_clause subquery_from_clause [where_clause [groupby_clause] [having_clause]
在此版本中,子查询仅限于 WHERE 和 HAVING 子句。FROM 子句中对子查询的支持将在以后的规范版本中考虑。
您的查询似乎是用 SQL 编写的,将其转换为 JPQL 需要做一些事情:
status
是类型字段,String
请务必将状态括起来,例如PENDING
用单引号引起来。我相信您也可以将查询编写为联接(伪代码):
select d
from T_DEBIT d
left join T_REQUEST tr
on d.id = tr.debit_id
where d.status = 'PENDING'
and tr.status = 'SUCCESSFUL`
and tr.debit_id is null
这是无效的 sql:
select d from T_DEBIT d
where d.status=PENDING
and where not exists (subquery)
问题是 where 单词在主查询中出现了两次。只需将其删除,您的查询就变为:
select d from T_DEBIT d
where d.status=PENDING
and not exists (subquery)
其他答案也提出了有效的观点。
中的多个约束WHERE
很好,子查询也是如此,但是如果使用文字字符串,您可能希望将要比较的值r.status
与用引号括起来的值进行比较。除非我们遗漏了什么。
这个子查询的目的到底是什么?将它简单地包含在主查询中会不会容易得多?
select d from T_DEBIT d, T_REQUEST r where d.status='PENDING' and r.status != 'SUCCESSFUL' and r.debit.id= d.id
对于多个WHERE子句,使用AND like:
SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] AND [condition2] AND [condition3];
有关 AND & OR 的更多信息:http ://www.tutorialspoint.com/sql/sql-and-or-clauses.htm