mysql无法删除和查询,mysql-如何进行删除查询?

假设我具有以下数据库表结构:

A>-B-< &

其中>-是多对一关系,而-

现在,我想删除所有与给定名称的D对应的A条目.

有人可能会说

DELETE FROM A JOIN B ON JOIN C ON JOIN D ON WHERE D.name=?

将是一个解决方案.可悲的是,似乎在DELETE查询中不能有JOIN子句.

另一种方法是进行子查询,如下所示:

DELETE FROM A AS elem WHERE elem.id IN ( SELECT id FROM A JOIN B ON JOIN C ON JOIN D ON WHERE D.name=?);

尽管这可能在Oracle中有效,但MySQL不允许我这样做(我无法在要删除的表上进行选择).

那我该怎么做呢?

更准确地说,我使用的是Hibernate,它是HQL来创建此查询.因此,将首选JPA / Hibernate解决方案.

当然,简单的SQL也可以(我会尝试将其转换为HQL).

解决方法:

是的,您可以通过联接删除.语法在MySQL文档中说明:DELETE

DELETE A -- you only need to add `A` here, so it knows

-- which table to delete from

FROM A

JOIN B ON

JOIN C ON

JOIN D ON

WHERE D.name = ? ;

子查询方法也将起作用.如果用于执行A连接B的条件为ON A.xid = B.xid,则可以使用:

DELETE FROM A

WHERE A.xid IN

( SELECT B.xid

FROM B

JOIN C ON

JOIN D ON

WHERE D.name = ?

) ;

但是我不会用这个带有IN的子查询有时效果不佳.

另一种方法是相关的EXISTS子查询:

DELETE FROM A

WHERE EXISTS

( SELECT 1

FROM B

JOIN C ON

JOIN D ON

WHERE D.name = ?

AND A.xid = B.xid -- the condition for "A JOIN B"

) ;

标签:hibernate,sql,mysql

来源: https://codeday.me/bug/20191122/2062638.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值