SQL查询如何删除表2中处于非活动状态的表

SQL查询如何删除表2中处于非活动状态的表,sql,mariadb,Sql,Mariadb,SQL查询如何删除表2中处于非活动状态的表 表2包括列server\u name和active 如果active=0,我想运行查询,然后获取服务器名称并删除所有表 server\u name用于从表2外部删除表 表1示例(用于跌落): 表2示例: server_name,active google 1 yahoo 0 我想运行一般查询来删除yahoo表,因为yahoo在表2中不活动 所以我需要删除表名:yahoo 我有1000张桌子要放在桌子2外面 我需要为此运行哪个查询?您需要创建一个存储过

SQL查询如何删除表2中处于非活动状态的表

表2包括列
server\u name
active

如果active=0,我想运行查询,然后获取服务器名称并删除所有表

server\u name
用于从表2外部删除表

表1示例(用于跌落):

表2示例:

server_name,active
google 1
yahoo 0
我想运行一般查询来删除yahoo表,因为yahoo在表2中不活动

所以我需要删除表名:yahoo

我有1000张桌子要放在桌子2外面


我需要为此运行哪个查询?

您需要创建一个存储过程,该存储过程具有一个游标,该游标将遍历表中的所有记录

CREATE PROCEDURE demo()
BEGIN
DECLARE tablename varchar(100);
DECLARE activeflag tinyint;
DECLARE stm varchar(1000);

DECLARE cur CURSOR FOR SELECT server_name, active FROM table2

OPEN cur;

read_loop: LOOP
  FETCH cur1 INTO tablename, activeflag

  IF (activeflag < 1)
    SET stm = CONCAT('DROP TABLE ', tablename);
    PREPARE stmt FROM stm;
    EXECUTE stmt;
  END IF;

END LOOP;

CLOSE cur;
END
创建过程演示()
开始
声明tablename varchar(100);
声明activeflag tinyint;
声明stm varchar(1000);
声明当前光标用于选择服务器名称,从表2中处于活动状态
开放cur;
读循环:循环
将cur1提取到tablename、activeflag中
IF(activeflag<1)
设置stm=CONCAT('DROP TABLE',tablename);
从stm制备stmt;
执行stmt;
如果结束;
端环;
封闭电流;
结束

本质上,存储过程将遍历您的表,检查该记录是否处于活动状态,然后准备一条语句来运行DROP table命令。

您使用的是哪种数据库服务器?您需要提供关于您的问题的更多详细信息。我正在使用mysql/phpmyadmin。(sql)。我的问题很简单,如何从active=0的表2中删除表1,2,3,4,5,然后选择服务器名称并删除具有该服务器名称的表。我遇到了以下错误:[Err]1064-您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解使用“cur”附近的正确语法;read_loop:loop FETCH cur1到server_name,activeflag IF(acti'在第9I行,虽然您使用的是mySQL?为什么实例上有MariaDB错误?我想我使用的是sql,但我看到的是MariaDB。再一次。我有这个servers.sql在这个表中是server_name(varchar50)和active(int)列。在servers.sql中有两条记录google->active=0和yahoo active=1。在数据库中有两个表,分别称为google.sql和yahoo.sql。我想从服务器上运行一个脚本检查。sql检查谁是active=0,然后删除google.sql表我现在手头上没有MariaDB,但我非常确定您需要构造一种存储的过程,它将遍历该表,在该表中存储表名以及该表是否处于活动状态的标志。然后将表名存储到变量中,然后准备SQL命令以删除存储在该变量中的表。
CREATE PROCEDURE demo()
BEGIN
DECLARE tablename varchar(100);
DECLARE activeflag tinyint;
DECLARE stm varchar(1000);

DECLARE cur CURSOR FOR SELECT server_name, active FROM table2

OPEN cur;

read_loop: LOOP
  FETCH cur1 INTO tablename, activeflag

  IF (activeflag < 1)
    SET stm = CONCAT('DROP TABLE ', tablename);
    PREPARE stmt FROM stm;
    EXECUTE stmt;
  END IF;

END LOOP;

CLOSE cur;
END