在一条SQL查询中删除两个表中的记录

4

我有两个表格

EMPGROUP_TBL
SEQID | MASTERID | BUSINESS_UNIT | DIVISION | SUB_DIVISION | CLASSIFICATION | SUB_CLASSIFICATION

并且

EMP_MASTERTBL
MASTERID | EMPNO | LASTNAME | FIRSTNAME | JOBTITLE | LOCATION |

在我的ASP.NET表中,JOBTITLE、BUSINESS_UNIT、DIVISION、SUB_DIVISION、CLASSIFICATION和SUB_CLASSIFICATION都在一起。

因此,当我需要删除girdview中的记录时,我只需要删除EMP_MASTERTBL中的JOBTITLE以及EMPGROUP_TBL中的所有记录。

以下是我的代码:

DELETE em.JOBTITLE, eg.BUSINESS_UNIT, eg.DIVISION, eg.SUB_DIVISION, eg.CLASIFFICATION, eg.SUB_CLASSIFICATION
FROM EMP_MASTERTBL AS em, EMPGROUP_TBL AS eg
WHERE em.MASTERID = eg.MASTERID AND eg.MASTERID = '76196'

每次我运行或执行我的代码时,都会出现一个错误:“Incorrect syntax near ','.” 我尝试了不同的方法来修改我的代码,但问题仍然存在。
我也尝试过这个方法。
DELETE JOBTITLE FROM EMP_MASTERTBL WHERE MASTERID = '76196';
DELETE FROM EMPGROUP_TBL WHERE MASTERID = '76196'

但是我收到了一个错误消息:Invalid object name 'JOBTITLE'.

问题可能是什么?谢谢。


你需要先在主表上运行两个单独的“删除”查询,然后再在其他表上运行。 - Mahesh
1
您不能使用删除查询删除列。您可以使用更新查询将值替换为null,为什么不使用更新呢? - Pooja-G
1个回答

2
当您从表中删除时,不是仅删除特定字段,而是删除整行。这就是为什么在编写删除语句时不包括字段名称的原因。
还可以在两个表之间设置外键关系,以便在从EMP_MASTERTBL中删除时,也会删除EMPGROUP_TB中的子记录。 http://www.mysqltutorial.org/mysql-on-delete-cascade/ 编辑
经过仔细阅读您更新的问题,我认为您真正想做的是:
UPDATE EMP_MASTERTBL
   SET JOBTITLE = NULL
   WHERE MASTERID = '76196';

DELETE FROM EMPGROUP_TB
   WHERE MASTERID = '76196';

也就是说,您将JOBTITLE设置为NULL,并删除EMPGROUP_TB中的所有相关记录。


使用DELETE FROM EMPGROUP_TB WHERE MASTERID = '76196'; 这样的语句会删除EMPGROUP_TBL中的所有记录吗?包括LASTNAME等字段在内? - chobowski
@chobowski 整个记录包括所有细节将被删除。请查看修改后的答案。如果这不是你想要的,则“删除”不是正确的操作。 - mendosi
“在单个语句中,您无法从多个表中删除数据”这个说法,我强烈反对。例如,可以使用内部连接或左连接到这些表中... - Trevor
@mendosi非常感谢您的帮助。我得到了我想要的输出。 - chobowski
@Zaggler 是的,你说得对。我已经相应地编辑了我的回答。 - mendosi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接