【问题标题】: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 中。

标签: mysql syntax if-statement exists


【解决方案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 EXISTSWHERE 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
            

            【讨论】:

              猜你喜欢
              • 2017-11-02
              • 2019-02-10
              • 2021-08-25
              • 2017-10-06
              • 1970-01-01
              • 1970-01-01
              • 2014-07-16
              • 1970-01-01
              相关资源
              最近更新 更多