gpt4 book ai didi

c# - 删除查询中的内部连接有那么糟糕吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:09 26 4
gpt4 key购买 nike

我目前正在尝试使用 C# 从 MySQL 表中删除一行。
我有两个非常基本的表:“head_doc”和“Doc_details”。 Head_doc 包含一个名为 id_doc 的字段。 Doc_details 还有一个名为 id_doc 的字段和其他各种字段。
我正在尝试删除 Doc_details 中的所有详细信息,以获取可在 head_doc 中找到的特定 id_doc。
这是我的查询,但我被告知在 DELETE 查询上使用 INNER JOIN 是糟糕的编程。我该如何更改它?

DELETE h.*,d.* 
FROM head_doc h
INNER JOIN
doc_details d
ON h.id_doc = d.id_doc
WHERE h.id_doc= id_doc;

最佳答案

如果您只是想删除 doc_details 中没有相应父记录的记录(也称为孤立记录),那么请执行此操作(这可以通过添加外键约束来避免。请参见下面的注释):

delete
from doc_details
where id_doc not in (
select id_doc from head_doc
)

但是,如果您想删除两个表中具有特定 id 的所有记录,为了清楚起见,分解您的删除语句可能是个好主意:

delete from doc_details where id_doc = <value>
delete from doc_head where id_doc = <value>

注意:如果您在子表上设置了外键约束,并且您想要从父表中删除一条记录,数据库引擎将阻止您从中删除该记录如果未先删除子记录,则为父表。只要有可能,设置外键约束是确保在删除父记录时子表中没有孤立记录的好主意。

关于c# - 删除查询中的内部连接有那么糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30442328/

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