Я создаю хранимую процедуру, в которой я выполняю резервное копирование определенных значений из моей основной базы данных в другую.
У меня есть al oop, который выполняется для всех таблиц, и для определенных таблиц у меня разные операторы для создания резервных таблиц, но все они выглядят примерно так:
SET @backupQuery= NULL;
IF (tableName IN ('some_table', 'another_table')) THEN
SET @backupQuery= CONCAT(
'CREATE TABLE backup.', tableName, ' AS',
' SELECT * FROM mydb.', tableName
' WHERE row = "criteria");
ELSEIF (tableName IN ('table_with_other criteria')) THEN
SET @backupQuery= CONCAT(
...
IF (@backupQueryIS NOT NULL) THEN
PREPARE stmt from @backupQuery;
...
Если оператор Select не возвращает строк, он все равно создает пустую таблицу, это то, что я не хочу иметь.
Каков наилучший способ избежать пустых таблиц?
Моя идея состояла в том, чтобы разделить на две части: часть SELECT
и часть 'CREATE TABLE backup.' ,tableName, ' AS'
, Проверьте, вернул ли оператор SELECT какие-либо строки. Но я не уверен, как я могу это сделать.
Другим подходом было бы удалить все пустые таблицы в конце, но мне действительно не нравится это, поскольку процедура делает бесполезные вещи.