SQL - 根据列值删除所有表中的行

问题描述 投票:0回答:4

我有一个包含数百个表的 MySQL 数据库。

我需要删除基于名为“companyId”的公共列的所有表中的记录 - 该列存在于数据库的所有表中。

如何删除所有表中columnId = somenumber 的所有记录?

提前谢谢您!

伊万诺·C.

@SocratesG 我尝试了您的存储过程,但我得到以下创建 SP 的信息:

ERROR 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '@TableName VARCHAR(128); 附近使用的正确语法。

DECLARE @MyColumn VARCHAR(128); SET @MyColumn = 'compan' at line 4 SQL Statement: CREATE PROCEDURE `deletePortalInstance` () BEGIN DECLARE @TableName VARCHAR(128); DECLARE @MyColumn VARCHAR(128); SET @MyColumn = 'companyId' DECLARE MyCursor CURSOR FOR (SELECT OBJECT_NAME(c.id) AS ObjectName FROM dbo.syscolumns c WHERE OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only AND c.name = @MyColumn) OPEN MyCursor FETCH NEXT FROM MyCursor into @TableName WHILE @@FETCH_STATUS = 0 BEGIN EXEC('DELETE '+@MyColumn+' FROM '+@TableName+' WHERE '+@MyColumn+' = 906454') FETCH NEXT FROM MyCursor into @TableName END CLOSE MyCursor DEALLOCATE MyCursor END
    
mysql sql sql-delete
4个回答
0
投票
DELETE FROM companyId where columnId = 1
    

0
投票
你可以试试这个

DECLARE @TableName VARCHAR(128); DECLARE @MyColumn VARCHAR(128); SET @MyColumn = 'MyColumnName' DECLARE MyCursor CURSOR FOR (SELECT OBJECT_NAME(c.id) as ObjectName FROM dbo.syscolumns c WHERE OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only AND c.name = @MyColumn) OPEN MyCursor FETCH NEXT FROM MyCursor into @TableName WHILE @@FETCH_STATUS = 0 BEGIN EXEC ( 'DELETE ' + @MyColumn +' FROM ' + @TableName +' WHERE ' + @MyColumn + ' <= 1000' ) FETCH NEXT FROM MyCursor into @TableName END CLOSE MyCursor DEALLOCATE MyCursor
    

0
投票
DELETE FROM <tblName> where columnId = <Your Column Id val>

但我认为您使用外键来使用参照完整性约束并使用

删除级联

根据您的新信息,

更新:

DELETE t1, t2 FROM <table1> t1 JOIN <table2> t2 ON t1.columnId = t2.columnId WHERE t1.columnId = <Your Column Value>

说明:

  1. 这里我们要从多个表中删除记录,所以我们使用

    DELETE FROM table1,table2

  2. 由于所有表中都有一列同名,因此我们制作了

    JOIN

    ,因此可以一次删除 100 个表中的所有行。

3.最后我们有像

WHERE t1.columnId = 1

这样的条件,意味着在table1中,检查columnId = 1,所以当我们加入时,它会选择100个表中的所有此类行,然后删除它。


-1
投票
DELETE FROM table_Name where columnn_name = value ;

示例

DELETE fom students where rll_num = 5 ;
    
© www.soinside.com 2019 - 2024. All rights reserved.