从同一查询中的两个表中删除 NULL 行[重复]
Posted
技术标签:
【中文标题】从同一查询中的两个表中删除 NULL 行[重复]【英文标题】:Deleting NULL rows from two tables in the same query [duplicate] 【发布时间】:2017-11-07 14:44:06 【问题描述】:您好,我正在处理一个非常简单的查询,这个查询假设删除我表上的所有空行,我知道这是我的查询
DELETE FROM myTable WHERE myID IS NULL;
但是我想在存储过程中包含这个查询,这次我想在一个查询中从两个表中删除所有空值,这是我的进步:
DELETE tblOg.myID, TblOrd.myID
FROM myTbl tblOg,
myTblOrdered TblOrd
WHERE myTbl.myID IS NULL AND myTblOrdered.myID IS NULL;
但我得到了这个错误
消息 102,级别 15,状态 1,第 7 行 'TblOrd' 附近的语法不正确。
不确定我是否应该使用INNER JOIN
或者我应该把它放在哪里。
提前致谢。
【问题讨论】:
你用的是什么关系型数据库? 使用DELETE
语句只能从一张表中删除。
@Lamak Microsoft SQL Server
DELETE 语句中的 FROM 关键字经常以令人困惑的方式使用。我们可以说DELETE myTable WHERE myID IS NULL
(without FROM) 这与您的第一个查询完全相同。然后,您可以在 WHERE 之前添加 FROM 以指定其他表连接,以帮助识别要从第一个表中删除的行。我发现这是一个愚蠢的语言问题,在不需要时允许使用 FROM - IMO 应该只允许在 DELETE 中指定 JOIN,但事实并非如此。
【参考方案1】:
你不能像这样用分号分隔它们吗:
DELETE FROM table1 WHERE myID IS NULL;
DELETE FROM table2 WHERE myID IS NULL;
或
使用内连接
DELETE FROM table1 INNER JOIN table2 WHERE table1.myID IS NULL AND table2.myID IS NULL.
【讨论】:
您的答案的第二部分将不起作用。您仍然只是从 1 个表中删除,其次您不能加入空值。以上是关于从同一查询中的两个表中删除 NULL 行[重复]的主要内容,如果未能解决你的问题,请参考以下文章
oracle 数据去重问题,要求去掉表中的重复数据,但得保留重复数据中MD的值最小的那条数据