2016-04-05 67 views
2

我有一个包含100多个表的数据库。其中约20人有专门的专栏,说column1从所有表中删除行

我可以删除所有表,where column1="abc"中的行,但不指定每个表吗?

所以我需要的东西是这样的:

DELETE FROM [all tables] WHERE column1 = 'abc'; 
+0

您需要创建一个动态查询。使用'information_schema'通过'column1'获取表格 –

+0

只需查询信息模式,获取有问题的行的表名并构造查询。除非需要多次运行此查询,否则无需为此跳过这些箍。 –

回答

4

最简单的方法可能是以下几点:

SELECT 
CONCAT('DELETE FROM ',TABLE_NAME," WHERE column1 = 'abc';") comd 
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'YOUR_DATABASE_NAME' 
AND COLUMN_NAME ='column1'; 

该查询会给你输出象下面这样:

DELETE FROM TABLE_1 WHERE column1 = 'abc'; 
DELETE FROM TABLE_2 WHERE column1 = 'abc'; 
DELETE FROM TABLE_3 WHERE column1 = 'abc'; 
DELETE FROM TABLE_4 WHERE column1 = 'abc'; 
. 
. 
. 

现在复制这些DELETE命令并执行所有。


注: 在其他的方式,你可以写一个存储的程序,你可以通过prepare statement把这些generated command strings成可执行的命令/查询。

但是你可以选择上面提到的最简单的方法来绕过复杂性。

+0

不,你不会得到一个错误。如果特定条目不存在,则不需要删除。它会静静地运行。 – 1000111