求大神帮忙分析一个SQL,不是很复杂,但是做起来真的很难!!!
(重要的我用红色标出)
MSP表,其中字段及释义:
MSP_ID:主键ID
CARRIER_ID:区域ID,每一个区域都有一个ID和上级ID,其中山西是顶级,上级ID为0。要求里面不需要管这个区域的信息,只需要知道,某区域可以是省/市/县!
COMPANY_ID:公司ID
BUSINESS_ID:业务ID
关系:
区域就是省市县三级关联就不多说了。
其中公司与业务关系是多对一。
要求:查询MSP这个表,如果(A公司代维某区域某业务),判断,这个关系中是否存在(A——山西——某业务),有的话就结束,没有的话就insert一个(A——山西——某业务)
求大神分析!先谢谢前来帮忙的各位了!!分析一下也是对各位SQL的整理技术的提高哦!!!
我举个例子,比如A公司代维太原区域基站业务,如果MSP表中记录存在A公司代维山西区域基站业务,那么就没事了,如果不存在就插入这条数据!
------解决方案--------------------
先SELECT
再IF
判断是否存在
不存在
INSERT
一个表一个表地INSERT
注意不违背表之间的逻辑关系就OK了
------解决方案--------------------
用的着这么麻烦吗?
直接生成最新的全部数据,然后有2种做法
1) 清空原MSP,全量插入新数据
2) 插入时,加过滤条件,如 not in (判断条件)
------解决方案--------------------
merge也是可以的。 只是在找到的时候不进行操作。
------解决方案--------------------
光这一张表没法做吧,至少还需要加一列“上级区域ID”或另外建一张表包含“区域ID”和“上级区域ID”两个字段。这样的话就是典型的“层次表”,或叫“目录树表”。这种表的相关算法几年前已经有大牛写出来了,就在csdn论坛里。google一下也能找出N多转帖。