Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从子查询中删除_Mysql_Sql_Hibernate_Jpa - Fatal编程技术网

Mysql 从子查询中删除

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

我正在应用程序中使用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 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子句中有多个表时知道要从哪个表中删除。