将一个原始表拆分得到两个表

 目标:通过一个原始表得到两个表

                                  表t_a

                      表t_b

 

                                  表t_c

 

 

1.首先根据表t_a生成表t_b

根据表t_a的type列进行分组,然后对分组的qty列进行求和,最后生成一个新的数据表

CREATE TABLE t_b 

SELECT SUM(a.qty) qty,a.type TYPE
FROM t_a a
GROUP BY TYPE

然后,给新的数据表加上一列id,并设置为主键,自增,

ALTER TABLE `test88`.`t_b` ADD COLUMN `id` INT(10) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`id`);

操作完成后就得到了新的数据表t_b

2.由表t_a和表t_b生成表t_c

以表t_a和表t_b的type属性为关联关系将两表进行联查,由t_a表的number、name、qty属性生成表t_c的number、name、qty

由t_b表的id属性生成表t_c的parentid

最后生成该新的数据表

CREATE TABLE t_c
SELECT b.id parentid,a.number number,a.name NAME,a.qty qty
FROM t_a a RIGHT JOIN t_b b ON a.type=b.type

 

 

 

 

 

 

在C++中,将一个单链拆分两个独立的链,通常是在节点数目为奇数的情况下,可以将最后一个节点单独作为一个的链,而其他节点形成另一个。这里是一个简单的示例代码: ```cpp #include <iostream> // 链节点结构体 struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(nullptr) {} }; ListNode* splitList(ListNode* head) { if (!head || !head->next) { // 如果链为空或只有一个元素 return head; } ListNode* slow = head; // 指针slow每次移动一步 ListNode* fast = head->next; // 指针fast每次移动两步 // 当fast指针到达链末尾时,slow指针停在倒数第二个节点 while (fast && fast->next) { slow = slow->next; fast = fast->next->next; } // 将慢速指针后的部分从原链断开,并作为的头 ListNode* newHead = slow->next; slow->next = nullptr; return newHead; } // 打印链 void printList(ListNode* head) { while (head) { std::cout << head->val << " "; head = head->next; } std::cout << std::endl; } int main() { // 创建一个测试链 ListNode* list = new ListNode(1); list->next = new ListNode(2); list->next->next = new ListNode(3); list->next->next->next = new ListNode(4); ListNode* newHead = splitList(list); std::cout << "Original List: "; printList(list); std::cout << "Split List: "; printList(newHead); return 0; } ``` 这个代码首先通过快慢指针找到链的中间位置,然后将原链在中间断开。`splitList`函数返回的链头部,而原始保持不变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值