Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - Ignorer la requête si la table n'existe pas

Je dois convenir que votre exigence semble assez étrange. Quoi qu'il en soit, votre requête ne fonctionne pas, car MySQL (et je parie que tous les autres SGBD aussi) évalue d'abord la requête pour vérifier les erreurs de syntaxe, etc. ... et les tables existantes.

Soit vous effectuez simplement ces requêtes multiples dans votre code d'application, soit vous créez une procédure stockée pour obtenir les données à l'aide d'instructions préparées. Le code pour cela ressemblerait à ceci :

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 ;

Une fois créé, vous exécuterez ensuite la procédure avec

CALL get_my_data();