目录
一、SQL问题
实际企业开发中我们会遇到很多实际的需求来写对用的sql,其中比较常用的是sql怎样将查询结果作为增删改语句的值来操作,这个相信大部分程序猿猴会经常遇到,作为insert语句来操作应该很多猴宝宝已经会了,所以这里就不多说了,还是主要说说修改和删除语句
二、根据实际需求写sql语句所遇问题
最近的开发过程中需要写大量的sql语句,其中有一条语句是比较难理解的
两张表,一张是普通的数据表(后面简称为数据表),另一张是给这张表用来打标的(后面简称为标签表,根据type字段和code字段来打标,不根据id来打标),根据code_id来关联两张表
需求是这样的:首先根据code_id来关联两条数据,查一下标签表中的code字段是否为空,分为两种情况
1、如果code字段为空,则需要用到update语句把从数据表中根据code_id查询出来的code赋值给标签表中的code字段,执行完这段语句后,还有code字段为空的字段则直接删除就好
对应的sql:
UPDATE t_abs_tag_relation a
INNER JOIN (
SELECT
basic_code,
code_id
FROM
t_abs_basic_code
WHERE
code_id IN ( SELECT code_id FROM t_abs_tag_relation WHERE tag_basic_code IS NULL OR tag_basic_code = '')) b
SET a.tag_basic_code = b.basic_code
WHERE
a.code_id = b.code_id;
DELETE
FROM
t_abs_tag_relation
WHERE
tag_basic_code IS NULL
OR tag_basic_code = '';
上面三张图对应的是第一种情况,如果又不理解的猴宝宝可以私信问我,我不一定能解释通,哈哈
2、如果字段不为空,则需要查看两张表中根据code_id查出来的code值是否一致,如果一致的话则说明这条数据的打标数据没问题,不用管,如果code值不一致,则直接删除
对应的sql:
DELETE
FROM
t_abs_tag_relation
WHERE
relation_id IN (
SELECT
a.relation_id
FROM
t_abs_tag_relation a,(
SELECT
basic_code,
code_id
FROM
t_abs_basic_code
WHERE
code_id IN ( SELECT code_id FROM t_abs_tag_relation WHERE tag_basic_code IS NOT NULL OR tag_basic_code != '')) b
WHERE
a.code_id = b.code_id
AND a.tag_basic_code != b.basic_code
);
总结
遇到不会的sql语句时别着急,其实sql语句并不难,主要的是需要深度理解业务需求,然后拆分下,把表中字段和需求中的描述一一对应起来,把大需求分解成小需求,然后把多个小需求再合并成一个大需求基本就可以解决问题