MySQL 存储过程搜索另一个 table
MySQL Stored Procedure Search another table
我对存储过程完全陌生,但知道这比每次我需要执行此类操作时尝试编写 PHP+MySQL 代码更有效。
我有两个 table。 资本资产、系统
我想找到所有不为 null
的 CapitalAssets.ServerName
我必须 link 两个 table 在一起, Systems table 有 IP 地址, hostname 。
我想(逐行)抓取 CapitalAssets.ServerName 并搜索 Systems.hostname,如果发现我要link/print
CapitalAssests: Systems.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;
两个table分贝相同
" 抓住 CapitalAssets.ServerName 并搜索 Systems.hostname,如果找到我想要 link/print "
如果这是最终目标。试试这个
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 );
我对存储过程完全陌生,但知道这比每次我需要执行此类操作时尝试编写 PHP+MySQL 代码更有效。
我有两个 table。 资本资产、系统 我想找到所有不为 null
的 CapitalAssets.ServerName我必须 link 两个 table 在一起, Systems table 有 IP 地址, hostname 。
我想(逐行)抓取 CapitalAssets.ServerName 并搜索 Systems.hostname,如果发现我要link/print
CapitalAssests: Systems.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;
两个table分贝相同
" 抓住 CapitalAssets.ServerName 并搜索 Systems.hostname,如果找到我想要 link/print "
如果这是最终目标。试试这个
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 );