解决方案 »
- oracle 触发器 把更新的提高20% 但不高于100
- 标题难写(oracle执行一次事务前后查询出的数据变化)
- 只有oracle的dbf文件能不能恢复到oracle10数据库里??
- 出现ORA-12545:连接因对象主机或对象不存在而失败这样的问题,请专家指点
- 奇怪!!!oracle占用了所以的linux系统CUP资源!
- oracle 存储过程 怎么少用 if then
- win2000下安装oracle9i的问题
- 如何在8i中建立数据资料库?在线等
- 谁用过oracle workflow 呀,能不能介绍一下,推荐几个网站或介绍几本书也行
- 使用server manager
- oracle如何实现增量备份??
- oracle for in loop 这样写 对吗?
CREATE OR REPLACE VIEW v_village
AS
SELECT p.ID, p.province_name, c.cid, c.city_name, t.tid, t.town_name,
v.vid, v.village_name
FROM province p, city c, town t, village v
WHERE v.tid = t.tid AND t.cid = c.cid AND c.ID = p.ID
select * from Archives a,v_village v where a.vid=v.vid
LuiseRADL 说的“创建档案表是,加入省、市、镇、村的id”
这样的话,如果省、市、镇、村如果之间的关系有变动的话,同时也要修改档案表了,譬如说把某一村从一个镇移到另一个镇。这样档案表也同时要修改省、市、镇、村的id。这样的话,是不是比较麻烦呢?---
还有一个问题是,现在除了给档案加上地市。同时还要给档案加上存储位置(譬如:仓,房,架,箱),也是四级(和省、市、镇、村之间的逻辑关系一样)。
现在也要显示档案的存储位置。CREATE OR REPLACE VIEW v_village
AS
SELECT p.ID, p.province_name, c.cid, c.city_name, t.tid, t.town_name,
v.vid, v.village_name
FROM province p, city c, town t, village v
WHERE v.tid = t.tid AND t.cid = c.cid AND c.ID = p.ID这上面已经级联了4张表了。
如果同时显示存储位置 ,那这样一来 ,那在查询语句里面一共要级联8张表,这样的话查询速度是不是要受很大影响呢
create table Archives
(
id int ,
a_name varchar2(50),--姓名
a_sex char(1),--性别
........
vid int ---外键村id
)红字部分id varchar2(18),个人觉得模仿身份证号码
1-2位是省的代号
3-4位是市的代号
5-6位是县的代号
7-14位是出生年月日
15-16位是当地派出所的代号
17为为性别代号(奇数男,偶数女),
18校验码(0-9随机)
这样外键vid int ---外键村id可以去除
通过截取id的位数来获取省、市、镇、村的信息
提供2种方法
1)id varchar(19)
录入数据时如果是18为的身份证 为x+身份证号码
如果是15为的身份证 y+身份证号
x就18的身份证编码方式
y就15的身份证编码方式2)在 用户档案表 加个字段 flag varchar(1), o为18,1为15
flag =o 就18的身份证编码方式
flag =1 就15的身份证编码方式
写级联语句呢?
select
c1.name as 村名,
c2.name as 镇名,
c3.name as 市名,
c4.name as 省名,
z.* from 用户主表 z
left join 地址代码表 c1 on z.村ID = c1.id
left join 地址代码表 c2 on c1.pid = c2.id
left join 地址代码表 c3 on c2.pid = c3.id
left join 地址代码表 c4 on c3.pid = c4.idOracle 数据库用 connect by 搞定