MySQL 是不是支持“如果存在”?
Posted
技术标签:
【中文标题】MySQL 是不是支持“如果存在”?【英文标题】:Does MySQL support "IF EXISTS"?MySQL 是否支持“如果存在”? 【发布时间】:2012-07-10 08:27:43 【问题描述】:我认为我对 SQL Server 和 mysql 的了解之间存在冲突。 当我运行这个查询时,我总是从 MySQL 收到一个错误:
If EXISTS (select * from tbl_admin) THEN
select 'OK';
END IF;
错误信息是:
[Err] 1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 'if EXISTS (select * from tbl_admin) then select '1' 附近使用 -- 在第 1 行选择 '1' WHERE EXISTS '
请帮助我,告诉我我写这个查询有错吗?怎么了?
如果tbl_admin
表中有东西,我想做点什么。
【问题讨论】:
错误信息与您发布的代码不对应。据我所知,IF EXISTS
不是有效的 MySQL 语法,尽管它存在于 SQL Server 中。
【参考方案1】:
select 'ok'
from INFORMATION_SCHEMA.tables
where table_name = 'tbl_admin'
编辑
要检查表是否包含数据,您可以这样做:
SELECT 'OK' FROM dual
WHERE EXISTS (SELECT * FROM tbl_admin);
【讨论】:
如果表存在,这将返回 ok,但用户想要该表中是否存在行 juergen d,你能给我一个使用 IF EXISTS 的代码吗?了解它的正确语法对我来说很重要。 你不能在 MySQL 中使用if exists
。您只能在 where
子句中使用 where exists(select ...)
。
所以SELECT 'OK' WHERE EXISTS(SELECT * FROM tbl_admin);
必须正确执行,对吧?
你需要一个from
子句:SELECT 'OK' from dual WHERE EXISTS(SELECT * FROM tbl_admin);
【参考方案2】:
如果我理解正确,您知道有一个表格,如果有任何行,您只需要一个信息? 在那种情况下,我认为这可以解决您的问题:
SELECT
'OK'
FROM
Korisnik
WHERE
EXISTS( SELECT
COUNT(*)
FROM
Korisnik)
LIMIT 1;
您可以使用IF EXISTS
来检查存储过程或触发器是否存在。在 SELECT 查询中,您可以使用 WHERE EXISTS
或 WHERE NOT EXISTS
http://dev.mysql.com/doc/refman/5.5/en/exists-and-not-exists-subqueries.html
【讨论】:
【参考方案3】:你可以这样做:
if ( (select count(*) from tbl_admin) > 0) then
...
这会计算表中的所有行。如果没有行,它将返回 0。
【讨论】:
【参考方案4】:select case when count(*) > 0 then 'OK' else 'Empty' end from tbl_admin;
或
select 'OK' from tbl_admin having count(*) > 0;
【讨论】:
【参考方案5】:如果要检查表是否存在,请使用此
select 'Message' from INFORMATION_SCHEMA.tables where table_name = 'tbl_admin'
因为所有信息都存储在这里。EXISTS 在 mysql 中也可以正常工作。
【讨论】:
【参考方案6】:select if(count(*), 'OK', '') as result from table_name where 1
如果存在记录,这将打印“OK”,否则将不显示任何内容。
【讨论】:
【参考方案7】:使用普通的选择查询..
Select 'OK' from table
【讨论】:
以上是关于MySQL 是不是支持“如果存在”?的主要内容,如果未能解决你的问题,请参考以下文章