【问题标题】:MySQL Stored Procedure Search another tableMySQL存储过程搜索另一个表
【发布时间】:2015-05-07 03:55:08
【问题描述】:

我对存储过程完全陌生,但我知道这可能比每次需要执行此类操作时都尝试编写 PHP+MySQL 代码更有效。

我有两张桌子。 CapitalAssets系统 我想找到所有不为空的 CapitalAssets.ServerName

我必须将这两个表链接在一起,Systems 表有 IP 地址,hostname

我想(逐行)抓取 CapitalAssets.ServerName 并搜索 Systems.hostname,如果找到我想链接/打印

CapitalAssestsSystems.id、Systems.hostname、Systems.IP、CapitalAssets.id、CapitalAssets.ServerName

这是我的存储过程的开始,这是错误的。我现在不知道如何通过 Systems.hostname 进行搜索(?在哪里)

begin
      declare GSATcur cursor for
            'select id,NEName,ManagementAddress FROM GSAT WHERE NEName like ?';

      declare CapitalCurr CURSOR FOR
            'SELECT id,SystemName FROM CapitalAssets WHERE SystemName != ""';

      DECLARE start INT DEFAULT 0;
      DECLARE sysname_not_found BOOL DEFAULT FALSE;

      DECLARE CONTINUE HANDLER FOR NOT FOUND SET sysname_not_found = TRUE;

      OPEN GSATcur;
      OPEN CapitalCur;

      loop1:
            WHILE start < 5 do
                  FETCH SystemName INTO NEName;
                  IF sysname_not_found THEN
                        LEAVE loop1;
                  END IF;

            END WHILE;

      CLOSE CapitalCur;
      CLOSE GSATcur;
END;

这两个表的 dB 相同。

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    " 抓取 CapitalAssets.ServerName 并搜索 Systems.hostname,如果找到我要链接/打印"

    如果这是最终目标。试试这个

    SELECT * FROM Systems
    WHERE hostname IN ( SELECT DISTINCT(ServerName) 
       FROM CapitalAssets WHERE ServerName IS NOT NULL );
    

    UPDATE CapitalAssets 
    INNER JOIN Systems
        ON Systems.hostname = CapitalAssests.ServerName
    SET CapitalAssets.ipAddress = Systems.ipAddress;
    

    UPDATE CapitalAssets 
    SET ipAddress = ( SELECT ipAddress 
        FROM Systems 
        WHERE  Systems.hostname = CapitalAssests.ServerName );
    

    【讨论】:

    • 是的,这就是目标。嗯,我想我把它弄得比它应该做的更复杂。感谢您的快速回复!
    • 现在让事情复杂化(很可能不适合你)。找到后我需要执行更新。我的表 SYSTEMS 有一列 ipAddress。当 Systems.hostname 匹配 CapitalAssests.ServerName 时,我想用 Systems.ipAddress 更新 CapitalAssets.ipAddress跨度>
    • 这是我目前向我展示的两个 IP 地址列:SELECT CapitalAssets.id,ServerName,ipAddress,Systems.ipAddress AS Systems_IPAddress from CapitalAssets JOIN Systems on CapitalAssets.ServerName = Systems.hostname WHERE hostname in ( SELECT hostname from Systems );
    • 根据您的第二条评论检查答案中的 UPDATE 查询。
    • 这就是我所需要的。谢谢!
    猜你喜欢
    • 2011-05-05
    • 2020-11-05
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多