【sql怎样将查询结果作为增删改语句的值来操作】

目录

一、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语句并不难,主要的是需要深度理解业务需求,然后拆分下,把表中字段和需求中的描述一一对应起来,把大需求分解成小需求,然后把多个小需求再合并成一个大需求基本就可以解决问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值