MySQL如果表存在,则选择行计数

时间:2015-12-03 10:46:49

标签: php mysql

我试图从表中获取行数,但前提是它存在。 (在一个SQL语句中。)

this问题,答案不会返回表中的行数(如果存在)。如果没有MySQL抛出错误'表不存在' ??

,怎么办呢?

我的SQL如下:

SELECT CASE
    WHEN
        ( (SELECT COUNT(*) FROM `information_schema`.`tables` WHERE `table_schema` = DATABASE() AND `table_name` = 'testTbl') > 0 )
    THEN
        (SELECT COUNT(*) FROM `testTbl`)
    ELSE
        (SELECT 0)
    END;

编辑:WHEN - 部分返回正确的值(如果表格不存在则为0,如果表格不存在,则为1)。 真正的问题是,当表格不存在时,整个SQL不返回/选择' 0'而是返回错误。 (因为THEN - 子句中提到了不存在的表,从而破坏了先前检查它是否存在的整个目的。换句话说,它不能忽略COUNT - 语句当表格不存在时,在THEN - 子句中。)

这是一个问题,因为我希望返回的值是整数(或数值)。

3 个答案:

答案 0 :(得分:0)

您必须在查询之前检查故事是否存在:

SHOW TABLES LIKE testTbl;

试试这个:

SELECT COUNT(*)
FROM information_schema.tables 
WHERE table_schema = '[database name]' 
AND table_name = '[table name]';

如果您从查询中获得任何结果,而不是表格存在!

答案 1 :(得分:0)

我环顾四周,发现了这个线程。我想计算表中的行数(如果存在),或者如果表不存在则返回 -1。 用您自己的值替换 [database_name][table_name]

SELECT MAX(TABLE_ROWS) AS TABLE_ROWS 
       FROM information_schema.tables 
            WHERE TABLE_SCHEMA = '[database_name]' 
            AND TABLE_NAME = '[table_name]'

此查询返回一个列 TABLE_ROWS,其中一个唯一的行包含 [table_name](如果表存在)或 NULL(如果 [table_name] 不存在)的行数。

>

如果我想在表不存在的情况下返回 -1 而不是 NULL,我使用以下查询:

SELECT IFNULL(MAX(TABLE_ROWS), -1) AS TABLE_ROWS 
       FROM information_schema.tables 
            WHERE TABLE_SCHEMA = '[database_name]' 
            AND TABLE_NAME = '[table_name]'

答案 2 :(得分:-1)

我发现问题的最接近的解决方案是从table_rows表中获取information_schema列(如果表存在):

SELECT IF(
    (SELECT COUNT(*) FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA` = (DATABASE()) AND `TABLE_NAME` = 'tokens_331698')>0,
        (SELECT `TABLE_ROWS` as `x` FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA` = (DATABASE()) AND `TABLE_NAME` = 'tokens_331698'),
        0
)

唯一的问题是,我不确定这个行计数值的准确程度。 (人?)