2016-11-22 142 views
4

我有两个表删除记录在一个查询SQL

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,分裂,SUB_DIVISION,分类和SUB_CLASSIFICATION是一起。

所以,当我要删除的记录在girdview我只需要删除EMPGROUP_TBL在EMP_MASTERTBL的JOBTITLE和所有的记录。

这是我的代码

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'.错误。

可能是什么问题?谢谢。

+0

您必须先在主表上然后在其他表上运行两个单独的“删除”查询。 –

+1

你不能删除查询删除列。您可以使用更新查询替换值为null,为什么不使用更新? –

回答

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中的所有相关记录。

+0

但如果我使用DELETE FROM EMPGROUP_TB WHERE MASTERID = '76196';将删除EMPGROUP_TBL中的所有记录?包括LASTNAME等? – chobowski

+0

@chobowski整个记录,包括所有的细节都将被删除。看修改后的答案。如果是这样。你想要的东西然后'删除'不是正确的行动。 – mendosi

+0

'你不能从一个语句中的多个表中删除'**我强烈不同意**,你当然可以。例如,对表格进行内部或左侧连接... – Codexer