MySQL 将 JOIN 语句转换为存储过程或函数?

标签 mysql stored-procedures concatenation stored-functions

所以我有一个 JOIN 语句,我将在多个地方使用它。它基本上找到一个 IP 地址并将其与中间表中的所述位置相匹配。我需要传入两个变量——一个是我的数据库/模式的前缀,另一个是 IP 地址本身。
因此使用 CONCAT() 函数将其拼凑起来。

所以目前我有一个看起来像这样的程序:

CREATE DEFINER=`root`@`%` PROCEDURE `LocationFromIp`(
ipAddress VARCHAR(16),
clientComp VARCHAR(32)
)
BEGIN

DECLARE test VARCHAR(255);

SET @networkSql = CONCAT("
SET @Location =
    (SELECT `network`.`Name`
    FROM `", clientComp, "-settings`.`iptable` AS `iptable`
    LEFT JOIN `", clientComp, "-settings`.`network` AS `network`
    ON `network`.`Subnet` = `iptable`.`Subnet`
    WHERE `iptable`.`IP` = '", ipAddress, "'
    LIMIT 1);
");

PREPARE test1 FROM @networkSql;
EXECUTE test1;

SELECT @Location AS `Location`;

它返回我想要的结果,但我不知道如何在语句中使用它。

SELECT `IPAddress` AS CALL LocationFromIp('clientComp', `IPAddress`)
(
    SELECT `IPAddress`
    FROM `clientComp-data`.`tablename`
    WHERE @date > `Date`;
)
GROUP BY `IPAddress`

以上都不行,希望大家能看懂我的思路!

那我该怎么做呢?

最佳答案

为什么您不能调整您的存储过程以从一开始就包含您需要的所有字段?

关于MySQL 将 JOIN 语句转换为存储过程或函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30796785/

相关文章:

sql - 仅当行不存在时才在 PL/pgSQL 中运行 SQL 语句

stored-procedures - JDBC - 从 Oracle 过程检索 boolean 输出

R 在组内跨行连接但保留序列

sql - 在 SQL 中连接计算字段

MySql 如果存在选择 ELSE 插入

mysql 创建生成列并删除特定字符

php循环通过mysql语句

mysql - 使用查询插入到mysql中的表中

php - 无法使用 Mysql 在 PHP 中建立与数据库的连接

mysql - 向表添加索引