MySQL - 如果表不存在,则忽略查询

时间:2014-06-10 10:34:37

标签: mysql

我有一个名为tableA的表,它可能不存在于某些数据库中。我希望在数据库中不存在tableA时忽略select查询语句。

我尝试从信息架构中选择计数,但其中一个if-else语句仍然有select * from tableA,这仍然会给我一个错误。

    SELECT IF( 
   (SELECT COUNT(*) FROM information_schema.TABLES 
   WHERE TABLE_NAME = 'tableA')>0,
   (SELECT COUNT(*) FROM tableA),
   (SELECT COUNT(*) FROM tableB) )

而且我还需要true-false的select语句来返回超过1列,但是当我尝试它时,它会给我一个超过1个操作数的错误。如何使查询在此IF查询中返回多于1列。

1 个答案:

答案 0 :(得分:3)

我必须同意你的要求似乎很奇怪。无论如何,你的查询不起作用,因为MySQL(我打赌所有其他DBMS)首先评估查询以检查语法错误等等......以及现有表。

您只需在应用程序代码中进行多次查询,或者创建存储过程以使用预准备语句获取数据。代码看起来像这样:

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 ;

创建后,您将使用

执行该过程
CALL get_my_data();