Mysql 从具有特定列值的每个表中删除所有记录 查找同一数据库中具有字段Client_ID的每个表 仅删除Client_ID=123的记录

Mysql 从具有特定列值的每个表中删除所有记录 查找同一数据库中具有字段Client_ID的每个表 仅删除Client_ID=123的记录,mysql,database,tsql,plsql,Mysql,Database,Tsql,Plsql,以上是我的设想。我想知道是否可以通过一个查询使用MySQL。您不知道带有Client\u ID字段的表的名称,它们可以使用信息模式找到并存储在临时表中。 然后,应在循环中生成动态查询以删除所需的记录。差不多吧 不,这不能在一条SQL语句中完成 您需要从information\u schema.columns表中使用一个单独的SELECT语句来标识包含具有特定名称的列的表,例如 SELECT table_name FROM information_schema.columns WHERE c

以上是我的设想。我想知道是否可以通过一个查询使用MySQL。

您不知道带有Client\u ID字段的表的名称,它们可以使用信息模式找到并存储在临时表中。
然后,应在循环中生成动态查询以删除所需的记录。差不多吧

不,这不能在一条SQL语句中完成

您需要从
information\u schema.columns
表中使用一个单独的
SELECT
语句来标识包含具有特定名称的列的表,例如

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

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

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

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

我是唯一一个想知道为什么这个问题有一个PLSQL标记的人吗?@MahendarMahi不,我要补充另一个疑问-为什么有tsql标记?