sql >> Base de Datos >  >> RDS >> Mysql

MySQL:ignorar la consulta si la tabla no existe

Debo estar de acuerdo en que su requisito parece bastante extraño. De todos modos, su consulta no funciona, porque MySQL (y apuesto a que todos los demás DBMS también) primero evalúa la consulta para verificar los errores de sintaxis, etc. y las tablas existentes.

O simplemente realiza estas consultas múltiples en el código de su aplicación o crea un procedimiento almacenado para obtener los datos utilizando declaraciones preparadas. El código para esto se vería así:

DELIMITER $$
CREATE PROCEDURE get_my_data()
BEGIN
SET @table_name = '';
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE SCHEMA_NAME = 'your_db_name' 
           AND TABLE_NAME = 'your_table_name')
THEN SET @table_name = 'tableA';
ELSE SET @table_name = 'tableB';
END IF;

SET @sql = CONCAT('SELECT COUNT(*) FROM ', @table_name, ';');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END $$
DELIMITER ;

Una vez creado, ejecutaría el procedimiento con

CALL get_my_data();