gpt4 book ai didi

mysql - 从子查询中删除

转载 作者:行者123 更新时间:2023-11-30 01:21:25 25 4
gpt4 key购买 nike

我在我的应用程序中使用 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)

但我收到错误:字段列表中的列“id”不明确。这感觉很正常,因为创建的 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 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)

我收到另一个错误:您无法在 FROM 子句中指定用于更新的目标表“active_times”

我对 JPQL(或 HQL)没有进行过太多实验,所以我不明白为什么查询看起来像第一个示例中的那样。

出现新错误是因为显然我无法在 MySQL 中的删除表上进行子查询。

对于如何重写上述查询之一以使其正常工作,您有什么建议吗?

最佳答案

只需删除子查询即可。这是没有必要的。我不确定如何在 Hybernate 中编写 SQL 代码,但我猜它会是这样的:

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;

关于mysql - 从子查询中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18489374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com