Tôi phải đồng ý rằng yêu cầu của bạn có vẻ khá kỳ quặc. Dù sao, truy vấn của bạn không hoạt động, bởi vì MySQL (và tôi cá là tất cả các DBMS khác) trước tiên đánh giá truy vấn để kiểm tra lỗi cú pháp, v.v. và đối với các bảng hiện có.
Bạn chỉ cần thực hiện nhiều truy vấn này trong mã ứng dụng của mình hoặc bạn tạo một thủ tục được lưu trữ để lấy dữ liệu bằng cách sử dụng các câu lệnh đã chuẩn bị. Mã cho điều này sẽ giống như sau:
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 ;
Sau khi tạo, bạn sẽ thực hiện thủ tục với
CALL get_my_data();