我无法找到使用多个where子句这样的有效与否(我使用JPA,MySQL)我需要多个where子句,其中一个将在这里“不”,或者我错过了什么?
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
)
请询问您是否需要进一步的信息,
答案 0 :(得分:4)
JPA提供对子查询的支持。 See the specification
子查询可以在WHERE或HAVING子句中使用。的语法 子查询如下:
subquery ::= simple_select_clause subquery_from_clause [where_clause [groupby_clause] [having_clause]
子查询仅限于WHERE和HAVING子句 发布。将考虑支持FROM子句中的子查询 在规范的后续版本中。
您的查询似乎是用SQL编写的,将其转换为JPQL需要做一些事情:
status
是String
类型的字段,请务必将PENDING
这样的状态用单引号括起来。我相信您也可以将您的查询编写为连接(PSEUDO CODE):
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
答案 1 :(得分:4)
这是无效的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)
其他答案也有效。
答案 2 :(得分:1)
WHERE
中的多个约束和子查询一样正常,但如果使用文字字符串,您可能希望将r.status
与引号括起来的值进行比较。除非我们错过了什么。
答案 3 :(得分:0)
这个子查询的目的究竟是什么?简单地将它包含在主查询中会不会轻松多了?
select d from T_DEBIT d, T_REQUEST r where d.status='PENDING' and r.status != 'SUCCESSFUL' and r.debit.id= d.id
答案 4 :(得分:0)
对于多个 WHERE 子句,请使用 AND ,如:
SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] AND [condition2] AND [condition3];
有关AND&的更多信息或者:http://www.tutorialspoint.com/sql/sql-and-or-clauses.htm