etl工程师 面试题_ETL工程师笔试题

本文介绍了ETL工程师面试中可能遇到的数据库操作题目,包括创建三个表`ta`, `tb`, `tc`的SQL语句,以及一个名为`query_a_and_b`的存储过程实现。存储过程用于根据条件从`tb`表中查询数据并插入到`tc`表中,涉及数据过滤和JOIN操作。具体实现中包含了针对不同情况的插入逻辑,如`qy`字段为'全国'或'其他'时的不同处理。文章末尾表示还有后续内容。" 72765472,5094793,Windows 2012 服务器管理器功能列表刷新失败解决方案,"['windowsServer', '系统管理', '服务器故障排除', 'Windows模块安装服务']
摘要由CSDN通过智能技术生成

1、参考答案

1)建表

CREATE TABLE `ta` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`cx` varchar(20) DEFAULT NULL,

`qy` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

CREATE TABLE `tb` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`cx` varchar(20) DEFAULT NULL,

`qy` varchar(20) DEFAULT NULL,

`jg` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

CREATE TABLE `tc` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`cx` varchar(20) DEFAULT NULL,

`qy` varchar(20) DEFAULT NULL,

`jg` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

存储过程:

DROP PROCEDURE IF EXISTS `query_a_and_b`;

DELIMITER ;;

CREATE PROCEDURE query_a_and_b() READS SQL DATA

BEGIN

DECLARE cxc varchar(20);

DECLARE qyc varchar(20);

DECLARE jgc INT;

DECLARE s INT DEFAULT 0 ;

DECLARE consume CURSOR FOR SELECT cx,qy,jg FROM tb;

-- DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET num = 1;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;

OPEN consume;

FETCH consume into cxc,qyc,jgc;

while s <> 1 DO

if(qyc=‘全国‘)THEN

INSERT INTO tc(cx,qy,jg)

SELECT a.cx,b.qy,a.jg from tb a left JOIN ta b on b.cx=a.cx WHERE b.cx=cxc;

ELSEif(qyc=‘其他‘)THEN

INSERT INTO tc(cx,qy,jg)

SELECT a.cx,b.qy,a.jg from tb a left JOIN ta b on b.cx=a.cx  WHERE a.qy=qyc and b.qy not in (

select t.qy from tb t WHERE t.cx=b.cx

);

ELSE

INSERT INTO tc(cx,qy,jg)

SELECT a.cx,a.qy,a.jg from tb a WHERE a.cx=cxc and a.qy=qyc;

END IF;

FETCH consume into cxc,qyc,jgc;

END WHILE;

CLOSE consume;

END;;

DELIMITER;

CALL query_a_and_b();

结果:

欢迎指正

未完待续。。。。

原文:https://www.cnblogs.com/XiaoyangBoke/p/11232137.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值