各位大侠:现阶段小弟有个项目需求,就是有一张表大概是这样子的,如下
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中一个一个的比较.
解决方案 »
- Weblogic是个什么东东啊,兄弟连这边的老师都不讲了啊?
- struts2 在配置web.xml文件时出现的异常解决方案汇总
- 求救:编写java程序 提取txt文本中的数字,存入到oracle数据库(自建)中
- java如何进行不定项查询
- 请各位前辈指点一下小妹吧!是否下一学期还报不报北大青鸟?
- 小弟刚学完J2SE和JAVA WEB 和servlet相关知识,J2EE 知识看起来很多,,应该怎么入手啊?
- 在线等,解决给分!Struts 中实现隐藏地址的方法
- class怎么才能不被反编译?
- 怎么办呢?要不要辞职?
- jb8+wls7布署session bean出现如下提示...如何解决...
- 求精通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语句了。