gpt4 book ai didi

MYSQL - 在存储过程中组合多个结果集

转载 作者:行者123 更新时间:2023-11-29 12:42:50 27 4
gpt4 key购买 nike

我有以下存储过程:

DELIMITER //

DROP PROCEDURE IF EXISTS active_locations;

CREATE PROCEDURE active_locations()

BEGIN

DECLARE y INT DEFAULT 1;
DECLARE LOC VARCHAR(200);

WHILE y < 6 DO

SELECT CONCAT('SELECT table_sample.LOC', GROUP_CONCAT(y), '_Status'
' FROM table_sample') INTO @LOC;

SET y = y + 1;

PREPARE stmt FROM @LOC;
EXECUTE stmt;

END WHILE;

END//

但是,当我在 Navicat 中调用此过程时,我会为 y 的每次迭代获得多个结果集(因此在本例中为 5)。我尝试将结果插入临时表,但只能得到 y = 1 的结果。我不熟悉存储过程,但我认为对于 y 的每个循环,MySQL 正在执行在单独的窗口中选择 table_sample.LOC', GROUP_CONCAT(y), '_Status' ' FROM table_sample

是否可以将这些列合并到一个表中,但同时仍逐列显示数据?

最佳答案

每次 EXECUTE 都会产生一个新的结果集。因此,如果您想要一个结果集,则必须只执行一次 EXECUTE。

您可以创建一个由六个使用 UNION ALL 粘合在一起的子 SELECT 组成的 SELECT:

SET @LOC = '';
WHILE y < 6 DO
SET @LOC = CONCAT(@LOC, ' SELECT table_sample.LOC', y, '_Status'
' FROM table_sample UNION ALL');
SET y = y + 1;
END WHILE;

/* Now we have one extra UNION ALL at the end, so remove it. */
SET @LOC = LEFT(@LOC, LENGTH(@LOC)-LENGTH('UNION ALL'));

PREPARE stmt FROM @LOC;
EXECUTE stmt;

顺便说一句,如果您通过创建子表以第一范式存储数据,这会简单得多,因此六个 LOCn_Status 列可以存储为六行中的一列.

关于MYSQL - 在存储过程中组合多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25875152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com