我试图从表中获取行计数,但前提是它存在。(在一个SQL语句中。)
从这个问题中,答案不会返回表中的行计数(如果存在)。如果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;
EDIT:WHEN
-部分返回正确的值(如果表不存在,则为0,如果存在,则返回1)。真正的问题是,当tabel不存在时,整个SQL并没有返回/选择"0",而是返回了一个错误。(因为THEN
-子句中提到了不存在的表,从而破坏了之前检查它是否存在的全部目的。换句话说,当表不存在时,它不能忽略THEN
-子句中的COUNT
-语句。)
这是一个问题,因为我希望返回的值是一个整数(或数值)。
我环顾四周,发现了这个线程。如果表存在,我想计算表中的行数,如果表不存在,则返回-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]
的行数;如果[table_name]
不存在,则返回NULL
的行数。
如果表不存在,我想返回-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]'
您必须在查询之前检查tale是否存在:
SHOW TABLES LIKE testTbl;
试试这个:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
如果您从查询中得到任何结果,则表存在!
我找到的最接近问题的解决方案是从information_schema
表中获取table_rows
列(如果该表存在):
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
)
唯一的问题是,我不确定这个行计数值有多准确。(有人吗?)