所以我需要从2个不同的表中提取2个id字段并将它们插入到第三个表中。这是一个权限的事情,所以基本上我需要获取admin
表的id和循环,直到所有building
表的id填充到第三个表中building_user
。这是开始"开始"权限表,所以我需要每个建筑物ID与每个管理员ID匹配。
这是我尝试的内容,我无法弄明白,但我知道我错过了什么。
CREATE PROCEDURE buildingUserAssignment()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE done2 INT DEFAULT 0;
DECLARE a, b INT;
DECLARE admin CURSOR
FOR
SELECT id FROM admin;
DECLARE building CURSOR
FOR
SELECT id FROM building;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN admin;
OPEN building;
REPEAT
FETCH admin into a;
REPEAT
FETCH building into b;
INSERT INTO building_user VALUES (a,b);
UNTIL done END REPEAT;
UNTIL done END REPEAT;
CLOSE admin;
CLOSE building;
END;
我最终只获得一个管理员ID字段(ID#2,即使ID为1)。以下是示例数据库:
admin
:
SELECT id FROM admin;
1
2
3
5
6
7
9
11
building
:
SELECT id FROM building;
0
1
3
6
7
8
10
调用buildingUserAssignment的当前最终结果:
SELECT * FROM building_user:
user_id building_id
2 0
2 1
2 2
2 3
2 4
2 4
3 4
5 4
6 4
7 4
9 4
11 4
所以building_user表最后应该是这样的,当然每个管理员ID都重复:
1 0
1 1
1 3
1 6
1 7
1 8
1 10
我确定它有些愚蠢,但我想我已经看了太长时间,现在我被卡住了。我甚至可能不会做这个"最好的"方式,所以我欢迎任何建议。
答案 0 :(得分:2)
您不需要使用循环。有一种称为CROSS JOIN的连接,它根据第一个表中的行数乘以第二个表的行数生成结果集。结果行将插入INSERT INTO..SELECT
语法。
INSERT INTO building_user
SELECT a.id, b.id
FROM admin a CROSS JOIN building_user b
答案 1 :(得分:0)
WHILE i < v_count DO
SET @start_date = JSON_UNQUOTE(JSON_EXTRACT(v_current_item, '$.start_date'));
SET @expiry_date = JSON_UNQUOTE(JSON_EXTRACT(v_current_item, '$.expiry_date'));
SET @amount = JSON_UNQUOTE(JSON_EXTRACT(v_current_item, '$.amount'));
SET @emp_id = JSON_UNQUOTE(JSON_EXTRACT(v_current_item, '$.emp_id'));
SET @update_id = JSON_UNQUOTE(JSON_EXTRACT(v_current_item,'$.update_id'));
SET i := i + 1;
END WHILE;