删除具有特定列值的每个表中的所有记录

时间:2015-06-19 17:42:36

标签: mysql database tsql plsql

  1. 查找具有字段Client_ID
  2. 的同一数据库中的每个表
  3. 仅删除Client_ID = 123
  4. 的记录

    以上就是我的情景。我想知道是否可以通过单一查询来使用MySQL。

3 个答案:

答案 0 :(得分:0)

您不知道具有Client_ID字段的表的名称,可以使用信息模式找到它们并将其存储在临时表中。 然后,应在循环中生成动态查询以删除所需的记录。这样的事情。

答案 1 :(得分:0)

不,这不能在单个SQL语句中完成。

您需要SELECT表中的单独information_schema.columns语句来标识包含具有特定名称的列的表,例如

SELECT table_name
  FROM information_schema.columns
 WHERE column_name = 'Client_ID'
   AND table_schema = 'mydatabase'

您可以使用SELECT的结果动态生成所需的DELETE语句。但是需要在DELETE语句中将表的名称指定为标识符。

答案 2 :(得分:0)

下面的代码可以完成这项工作。

DECLARE @T AS TABLE (ID INT PRIMARY KEY IDENTITY,STRSQL VARCHAR(8000))

INSERT INTO @T(STRSQL)
SELECT DISTINCT 'DELETE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] WHERE CLIENT_ID=123'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'CLIENT_ID'

DECLARE @ID INT, @STRSQL VARCHAR(8000)
WHILE ((SELECT COUNT(*) FROM @T)>0)
BEGIN
SELECT TOP 1
    @ID = ID,
    @STRSQL=STRSQL
FROM @T

EXEC (@STRSQL)
DELETE @T WHERE ID =@ID

END