Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:ignora la query se la tabella non esiste

Devo essere d'accordo sul fatto che la tua richiesta sembra piuttosto strana. Ad ogni modo, la tua query non funziona, perché MySQL (e scommetto anche tutti gli altri DBMS) valuta prima la query per verificare la presenza di errori di sintassi e così via ... e per le tabelle esistenti.

O esegui semplicemente queste query multiple nel codice dell'applicazione o crei una procedura memorizzata per ottenere i dati utilizzando istruzioni preparate. Il codice per questo sarebbe simile a questo:

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 volta creato, eseguiresti la procedura con

CALL get_my_data();