各位大侠:现阶段小弟有个项目需求,就是有一张表大概是这样子的,如下
zone min max
A区域 1 10B区域 12 50C区域 80 100
大概是这样子的,小弟我现在想通过sql判断我新增一条记录D 那么D 的记录不能在已有区域记录中出现 也就是说D区域的min到max的中包含的值不能再其他区域中出现.小弟的意思是说是从sql层面能不能处理完成呢?望各位交流指教,不想拿到java中一个一个的比较.
zone min max
A区域 1 10B区域 12 50C区域 80 100
大概是这样子的,小弟我现在想通过sql判断我新增一条记录D 那么D 的记录不能在已有区域记录中出现 也就是说D区域的min到max的中包含的值不能再其他区域中出现.小弟的意思是说是从sql层面能不能处理完成呢?望各位交流指教,不想拿到java中一个一个的比较.
解决方案 »
- 各位大侠详解一下JS代码...
- 开源Speedframework--基于类型元数据的羽量级ORM speedframework-1.1.0-Quaoar 发布
- java类的动态加载问题,急!!!
- Hibernate二级缓存使用问题
- 问一个date显示问题:
- jboss配置问题求教,急!
- 当insert into tb1 values(1,2,3) select * from tb1 两语句一起执行时,如何取得更新数量和结果集?
- 如何在jsp页面中嵌套formula one控件??
- 请问怎么安装ant
- poi 中的 HWPF,在 new HWPFDocument(),报出错误。 路径,文件名都是对的。
- 求精通EJB3.0 中文版 电子书
- 获取weblogic中配置的jndi数据源,调用时出错
SQL语句不是很难,顶多也就是表连接之类的东东,主要是触发器语法,各种数据库上并不一样...
From 表
Where (max < #Dmin Or min > #Dmin) And (max < #Dmin Or min > #Dmin)如果返回了记录,说明与该区域有交叉,没返回则说明OK。
Select zone, min, max
From 表
Where (max >= #Dmin And min <= #Dmin) Or (max >= #Dmax Or min <= #Dmax)
返回的记录是存在交叉的区域。
Select #Dzone, #Dmin, #Dmax
Where Not Exist (
Select zone From 表
Where (max >= #Dmin And min <= #Dmin) Or (max >= #Dmax Or min <= #Dmax)
)如果插入了记录,就是符合条件;没插入任何记录,就是不符合条件。
①用SQL做,SQL的全称量词是exists和not exists
或者
②用游标做,和Java程序中的逻辑差不多了,要遍历表中原来的所有记录
为啥不行?有无错误信息?(magong说的是对了,前面打错了,应该是 Not Exists)另:不是我换工作,是kouyiSC
create table zones(
zone varchar(10) primary key,
minv int not null,
maxv int not null
)--插入初始数据
insert into zones values('A区域', 1, 10)
insert into zones values('B区域', 12, 50)
insert into zones values('C区域', 80, 100)select * from zones
--3条--创建触发器
create
alter trigger zones_insert
on zones
after insert
as
if exists
(select * from zones, inserted
where (inserted.minv <= zones.maxv
and
inserted.minv >= zones.minv
or
inserted.maxv <= zones.maxv
and
inserted.maxv >= zones.minv)
and
inserted.zone != zones.zone
)
rollback --做完触发器后测试
insert into zones values('D区域', 88, 100)
select * from zones
--3条
insert into zones values('D区域', 78, 80)
select * from zones
--3条
insert into zones values('D区域', 120, 130)
select * from zones
--4条
--测试表明触发器行为合格
我说的是我的想法,你没必要一下子考虑得那么周全。如果想简单一点,
你可以先写一个SQL,查询有冲突的记录的条数,如:
select count(*) from zones where 数据1 between min and max
or 数据2 between min and max
如果返回的是0,则说明当前数据合法,就可以执行insert语句了。