Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Abfrage ignorieren, wenn Tabelle nicht existiert

Ich muss zustimmen, dass Ihre Anforderung ziemlich seltsam erscheint. Wie auch immer, Ihre Abfrage funktioniert nicht, weil MySQL (und ich wette, alle anderen DBMS auch) zuerst die Abfrage auswertet, um nach Syntaxfehlern usw. zu suchen ... und nach vorhandenen Tabellen.

Entweder führen Sie diese mehreren Abfragen einfach in Ihrem Anwendungscode durch, oder Sie erstellen eine gespeicherte Prozedur, um die Daten mithilfe vorbereiteter Anweisungen abzurufen. Der Code dafür würde in etwa so aussehen:

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 ;

Nach der Erstellung führen Sie die Prozedur dann mit

aus
CALL get_my_data();