gpt4 book ai didi

mysql - 根据条件垂直拆分表

转载 作者:行者123 更新时间:2023-11-29 15:26:43 25 4
gpt4 key购买 nike

我目前正在尝试根据年份将一个表垂直拆分为多个表。我的源表如下所示:

来源表:

|----------------------|-------------------|
| data | year |
|----------------------|-------------------|
| aaa | y1 |
| bbb | y1 |
| ccc | y2 |
| eee | y2 |
|----------------------|-------------------|

我想要得到的是:

第一年:

|----------------------|-------------------|
| data | year |
|----------------------|-------------------|
| aaa | y1 |
| bbb | y1 |
|----------------------|-------------------|

第二年

|----------------------|-------------------|
| data | year |
|----------------------|-------------------|
| ccc | y2 |
| ddd | y2 |
|----------------------|-------------------|

棘手的部分是,年数各不相同(最多 9 个不同的年份)。这意味着我需要根据年份列中唯一值的数量有条件地创建未定义数量的表。我使用的 MySQL 不支持 IF 或 SELECT INTO 查询,这就是我努力让它工作的原因。

最佳答案

您可以使用存储过程:

DELIMITER //
CREATE PROCEDURE multiSelect ()
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE selectedYear year;
DECLARE years CURSOR FOR SELECT DISTINCT year FROM myTable;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
OPEN years;
getList: LOOP
FETCH years INTO selectedYear;
IF finished = 1 THEN LEAVE getList; END IF;
SELECT * FROM myTable where year = selectedYear;
END LOOP getList;
CLOSE years;
END //
DELIMITER ;

DEMO

使用SP,您可以创建一个LOOPFETCH每个结果来创建1年或9年。您所要做的就是 CALL multiSelect();

了解有关 SP 的更多信息 HERE

关于mysql - 根据条件垂直拆分表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59034064/

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