在WHERE子句中使用SELECT结果作为列名

时间:2015-06-11 17:25:38

标签: mysql sql

使用id = 0删除数据库每个表中所有记录的最快方法是什么?

如果每个表都有第一列名为id,那将很简单,但在我的情况下,一个表的第一列名为id_tag,其他表为id_product等。

我已经知道我可以通过以下方式获得第一列的名称:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
                        WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'ps_tag' LIMIT 1

但如何将其包含在DELETE查询中?我需要这样的东西:

DELETE FROM 'ps_tag' WHERE [first_column] = 0

我的第一个想法是:

DELETE FROM 'ps_tag' 
             WHERE (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'ps_tag' LIMIT 1) = 0

但显然它不起作用。

1 个答案:

答案 0 :(得分:1)

评论太长了。

虽然您可以设置动态SQL语句,但我经常发现这种类型的操作在Excel中更容易。编写查询以获取您感兴趣的列名和表名。

然后,将它们加载到Excel中。

在另一个单元格中,输入一个类似'delete from @table where @column = 1'的字符串。

然后输入公式:

=substitute(substitute(<where the string is>, '@table', <tablename>), '@column', <columnname>))

将代码复制回数据库界面并执行它。

(任何电子表格都可以。我通常有Excel方便。)