Mysql 从子查询中删除
我正在应用程序中使用Hibernate。目前我正在尝试执行以下查询:Mysql 从子查询中删除,mysql,sql,hibernate,jpa,Mysql,Sql,Hibernate,Jpa,我正在应用程序中使用Hibernate。目前我正在尝试执行以下查询: DELETE FROM ActiveTimes a WHERE a.begin>=:from AND a.begin<=:to AND a.end>=:from AND a.end<=:to AND a in( SELECT al FROM ActiveTimes al JOIN al.source.stage st JOIN s
DELETE FROM ActiveTimes a WHERE
a.begin>=:from AND a.begin<=:to
AND a.end>=:from AND a.end<=:to
AND a in(
SELECT al FROM ActiveTimes al
JOIN al.source.stage st
JOIN st.level.dataSource ds
WHERE ds=:dataSource)
如果我将查询更改为:
DELETE FROM ActiveTimes a WHERE
a.begin>=:from AND a.begin<=:to
AND a.end>=:from AND a.end<=:to
AND a.id in(
SELECT al.id FROM ActiveTimes al
JOIN al.source.stage st
JOIN st.level.dataSource ds
WHERE ds.id=:dataSource)
从ActiveTimes中删除,其中
a、 begin>=:from和a.begin=:from和a.end只需删除子查询。没必要。我不确定如何在Hybernate中编写SQL代码,但我猜应该是这样的:
delete
from
active_times
where
begin>=?
and begin<=?
and end>=?
and end<=?
and (
id in (
select
id
from
active_times activeti1_
inner join
sources sourc2_
on activeti1_.source=sourc2_.id
inner join
stage stage3_
on sourc2_.id=stage3_.source
inner join
levels levels4_
on stage3_.level=levels4_.id
inner join
datasources datasource5_
on levels4_.data_source=datasource5_.id
where
id=?
)
)
DELETE a
FROM ActiveTimes a
JOIN a.source.stage st
JOIN st.level.dataSource ds
WHERE a.begin>=:from AND a.begin<=:to
AND a.end>=:from AND a.end<=:to
AND ds.id=:dataSource;
删除一个
从一开始
加入a.source.stage-st
加入st.level.dataSource ds
其中a.begin>=:from和a.begin=:from和a.end这是MySQL(许多)愚蠢的限制之一。您需要将子选择重新写入一个联接。@一匹没有名字的马,您能详细说明一下这个想法吗?更重要的是,你能告诉我为什么查询的第一个版本被翻译成如此含糊不清的方式吗?谢谢大家!@一匹没有名字的马已经贴出了答案。JPQL查询应该是这样的吗?抱歉,我不使用JPQL如果我按照您的建议执行,我会得到以下错误:意外标记:来自第1行第10列附近的。删除a
后删除,语法是从…删除谢谢bellabax。它知道从ActiveTimes表中删除吗?在MySQL中包括别名,以便在from子句中有多个表时知道要从哪个表中删除。