我有一个名为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列。
答案 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();