【问题标题】:Need help in MySQL stored procedure在 MySQL 存储过程中需要帮助
【发布时间】:2012-03-25 20:37:02
【问题描述】:

我是存储过程的新手,无需检查查询是否正常工作,但任何更好的代码都会非常受欢迎。
我有两个表
1.Users===>主记录表
2 .temp_Users===> 表包含更新的当前用户信息

我需要的任务是
A.检查需要删除的用户。
B.添加不在表中的新用户用户来自表 temp_Users

    DELIMITER //
    CREATE PROCEDURE checkUsers()
      BEGIN
      DECLARE oldusers, newusers INT DEFAULT 0

//To catch delete users      
      SELECT COUNT(Users.Ext) INTO oldusers
      FROM Users
      LEFT JOIN temp_Users
      ON temp_Users.Ext=Users.Ext
      WHERE temp_Users.Ext IS NULL;

//To catch new users    
      SELECT COUNT(temp_Users.Ext) INTO newusers
      FROM Users
      RIGHT JOIN temp_Users
      ON temp_Users.Ext=Users.Ext
      WHERE Users.Ext IS NULL;

      CASE 
         WHEN oldusers>0
         THEN DELETE FROM Users SELECT Users.Ext
              FROM Users
              LEFT JOIN temp_Users
              ON temp_Users.Ext=Users.Ext
              WHERE temp_Users.Ext IS NULL;

         WHEN newusers>0
         THEN INSERT INTO Users (Ext) SELECT temp_Users.Ext
              FROM Users
              RIGHT JOIN temp_Users
              ON temp_Users.Ext=Users.Ext
              WHERE Users.Ext IS NULL;
         ELSE exit;
         END CASE;


      END //
    DELIMITER ;

【问题讨论】:

  • 您可以删除初始的SELECT 语句,以及对oldusersnewusers 的分配,也可以删除CASE。只需运行 DELETEINSERT 语句;如果有符合条件的行,则将执行该操作,如果没有,则不会执行。您不需要 COUNT 或变量。
  • @KenWhite 是的,这将是我的最后一个选择,但需要了解如何使用它。
  • 您想学习如何编写不需要的代码?恐怕这没有任何意义——你要求更好的代码,我告诉你需要什么才能获得更好的代码(去掉不必要的东西)。 :)
  • @KenWhite 请告诉我为什么我的以下查询不起作用? DELETE FROM Users SELECT Users.Ext FROM Users LEFT JOIN temp_Users ON temp_Users.Ext=Users.Ext WHERE temp_Users.Ext IS NULL
  • 您的语法错误。 (未测试 - 我不是 MySQL 用户,所以您需要先仔细测试一下!)DELETE FROM Users WHERE Users.Ext IN (SELECT Users.Ext FROM Users u LEFT JOIN temp_Users t on t.Ext = u.Ext WHERE t.Ext IS NULL) 应该可以工作。 (顺便说一句,这应该是一个单独的问题。:))

标签: mysql database stored-procedures


【解决方案1】:

您的删除查询应该是 -

DELETE Users
FROM Users
LEFT JOIN temp_Users
    ON temp_Users.Ext=Users.Ext
WHERE temp_Users.Ext IS NULL;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多