【问题标题】:MySQL case execute a query on the basis of result returned from a queryMySQL案例根据查询返回的结果执行查询
【发布时间】:2015-03-25 20:59:05
【问题描述】:

我想要实现的是, 如果查询返回的行数:

SELECT count(*) FROM `games` WHERE cateID=2 AND active=1

等于 0,我想运行插入查询:

INSERT INTO games(cateID ,time,users,active)
                VALUES ('2', '1', '0', '1')

我尝试使用这样的案例:

SELECT CASE WHEN SELECT count(*) FROM `games` WHERE cateID=2 AND active=1)=0
    THEN INSERT INTO games(cateID ,time,users,active)
                VALUES ('2', '1', '0', '1')
END

但它返回错误为:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT count(*) FROM `games` WHERE cateID=2 AND active=1)=0
    THEN INSERT INTO' at line 1 

注意:两个查询单独执行时,执行时不会出现任何错误。 我如何做到这一点?

编辑:

也用 IF 试过这个,

SELECT if(count(*)==0,INSERT INTO games(cateID ,time,users,active)
                VALUES ('2', '1', '0', '1')) FROM `games` WHERE cateID=2 AND active=1

仍然给出同样的错误。 编辑 2: 根据建议的评论,

INSERT INTO games(cateID ,time,users,active)
select '2','2','0','1'
where (SELECT count(*) FROM `games` WHERE cateID=2 AND active=1) <= 0

还是报错。

【问题讨论】:

标签: mysql


【解决方案1】:

试试这个

DECLARE
  games_count INTEGER;
BEGIN
  SELECT count(*) FROM `games` WHERE cateID=2 AND active=1 ;
  IF games_count = 0 THEN
    INSERT INTO games(cateID ,time,users,active) VALUES ('2', '1', '0', '1');
  END IF;
END;

【讨论】:

  • 您需要选择 INTO games_count SELECT count(*) FROM games WHERE cateID=2 AND active=1 INTO games_count...你打败了我几秒钟,我只是准备按下发表你的答案:D
  • 给出错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“DECLARE games_count INTEGER”附近使用正确的语法
【解决方案2】:

在进行插入之前,请检查选择查询。如果选择查询返回 0 条记录,则插入查询不会插入任何内容。

select  cateID,'2' as time,'0' as users,active 
FROM 
   (select count(*) as countRecord,cateID,active 
    from games 
    where  CATEID=2 and active=1 group by cateID,active) G   
where countRecord <= 0  
group by cateID, active,time,users

【讨论】:

  • 仍然错误 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的 'active=1 group by cateID,active) where countRecord
  • @kritya Oups 对不起,我忘记了 where 子句中的 and CATEID=2 active=1 我已经更正了这个
猜你喜欢
  • 2012-11-29
  • 2018-03-06
  • 1970-01-01
  • 2017-11-14
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
相关资源
最近更新 更多