【问题标题】:MySQL Select If Table ExistsMySQL 选择表是否存在
【发布时间】:2013-09-15 08:14:04
【问题描述】:

我需要对一个表运行计数查询,但前提是该表存在,

SELECT 
CASE WHEN (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'DATABASENAME' AND TABLE_NAME = 'testtable') < 1 THEN '0' 
ELSE (SELECT COUNT(*) FROM testtable) END;

如果表不存在,上述查询应返回 0,但如果存在,则应获取计数。

这会返回一个错误,说“testtable”不存在,我们知道它不存在,因为 information_schema 计数返回 0。

这在 MySQL 中可行吗?

【问题讨论】:

    标签: mysql case information-schema


    【解决方案1】:

    你可以试试这个:

           SET @val := CASE (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'DATABASENAME' AND TABLE_NAME = 'testtable')
               WHEN 0 THEN 0
               ELSE (SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'DATABASENAME' AND TABLE_NAME = 'testtable')
    
    END;
            SELECT @val;
    

    返回0,如果没有这样的表,如果存在这样的表,它会返回计数,如果你把它带入函数可能会更好。

    【讨论】:

    • 您说得对,但查询仍然错误,我已对您的帖子进行了编辑,一旦接受,我将设置为答案。
    • 哦,是的,抱歉忘记添加数据库名称。
    • @Neo 我已经回滚了编辑。尽管我确信它是正确的,但以这种方式更改代码的编辑应该由帖子的创建者而不是其他人来完成;以免答案的含义超出回答者的原意。
    • 如果存在,这不会返回表的行数。问题是如何仅在表存在的情况下获取 testtable 的行数,而不让 SQL 语句抛出错误?
    猜你喜欢
    • 2019-12-21
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2013-07-23
    相关资源
    最近更新 更多