我试图从表中获取行数,但前提是它存在。 (在一个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
- 子句中。)
这是一个问题,因为我希望返回的值是整数(或数值)。
答案 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
)
唯一的问题是,我不确定这个行计数值的准确程度。 (人?)