表结构
CREATE TABLE TB_SYSTEM_DZM_DD
(
N_ID NUMBER(19) NOT NULL,
C_DZM VARCHAR2(6 CHAR),
C_NAME VARCHAR2(100 CHAR),
C_INFO VARCHAR2(200 CHAR)
);
CREATE TABLE TB_USER_DZM_DATA
(
N_BH NUMBER(18),
C_USERID VARCHAR2(32 CHAR) NOT NULL,
N_ID NUMBER(18) NOT NULL
)
数据情况:
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
2, '110000', '北京', '全国');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
3, '110100', '市辖区', '市辖区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
4, '110101', '东城区', '北京市东城区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
5, '110102', '西城区', '北京市西城区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
6, '110103', '崇文区', '北京市崇文区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
7, '110104', '宣武区', '北京市宣武区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
8, '110105', '朝阳区', '北京市朝阳区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
9, '110106', '丰台区', '北京市丰台区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
10, '110107', '石景山区', '北京市石景山区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
11, '110108', '海淀区', '北京市海淀区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
12, '110109', '门头沟区', '北京市门头沟区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
13, '110111', '房山区', '北京市房山区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
14, '110112', '通州区', '北京市通州区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
15, '110113', '顺义区', '北京市顺义区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
16, '110114', '昌平区', '北京市昌平区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
17, '110200', '县', '县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
18, '110224', '大兴县', '北京市大兴县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
19, '110226', '平谷县', '北京市平谷县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
20, '110227', '怀柔县', '北京市怀柔县'); INSERT INTO TB_USER_DZM_DATA ( N_BH, C_USERID, N_ID ) VALUES (
1, 'cg143', 2); 现在要这两个表关联输出结果要求,当C_USERID=’cg143’时:
N_ID C_DZM C_NAME
2 110000 北京
2 110100 市辖区
2 110101 东城区、
CREATE TABLE TB_SYSTEM_DZM_DD
(
N_ID NUMBER(19) NOT NULL,
C_DZM VARCHAR2(6 CHAR),
C_NAME VARCHAR2(100 CHAR),
C_INFO VARCHAR2(200 CHAR)
);
CREATE TABLE TB_USER_DZM_DATA
(
N_BH NUMBER(18),
C_USERID VARCHAR2(32 CHAR) NOT NULL,
N_ID NUMBER(18) NOT NULL
)
数据情况:
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
2, '110000', '北京', '全国');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
3, '110100', '市辖区', '市辖区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
4, '110101', '东城区', '北京市东城区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
5, '110102', '西城区', '北京市西城区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
6, '110103', '崇文区', '北京市崇文区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
7, '110104', '宣武区', '北京市宣武区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
8, '110105', '朝阳区', '北京市朝阳区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
9, '110106', '丰台区', '北京市丰台区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
10, '110107', '石景山区', '北京市石景山区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
11, '110108', '海淀区', '北京市海淀区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
12, '110109', '门头沟区', '北京市门头沟区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
13, '110111', '房山区', '北京市房山区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
14, '110112', '通州区', '北京市通州区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
15, '110113', '顺义区', '北京市顺义区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
16, '110114', '昌平区', '北京市昌平区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
17, '110200', '县', '县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
18, '110224', '大兴县', '北京市大兴县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
19, '110226', '平谷县', '北京市平谷县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
20, '110227', '怀柔县', '北京市怀柔县'); INSERT INTO TB_USER_DZM_DATA ( N_BH, C_USERID, N_ID ) VALUES (
1, 'cg143', 2); 现在要这两个表关联输出结果要求,当C_USERID=’cg143’时:
N_ID C_DZM C_NAME
2 110000 北京
2 110100 市辖区
2 110101 东城区、
解决方案 »
- Oracle 10g 在Linux上配置pc环境遇到的问题(PL/SQL执行)
- 请大家讨论oracle9i和10g的区别
- 求oracle存储过程报错“读取违反顺序”解决办法
- 高分请教数据接口问题解决方案,如有好的方案另外加分,绝不食言
- oracle 动态构件查询语句
- 我这存储过程错在哪??
- OracleServiceORCL服务启动不了(9i)
- 想通过互联网访问公司的数据库服务器,应该怎么建立服务名
- 高手执教,关于3NF??????
- oracle11g企业管理器如何更换数据库
- oracle sql !!急急急急
- 安装oracle数据库,没有安装SQL,要使用opendatasource,需要什么安装什么驱动?
select N_ID,C_DZM,C_NAME from TB_SYSTEM_DZM_DD
where N_ID in (select N_ID from TB_USER_DZM_DATA
where C_USERID=’cg143)
--try it
select N_ID,C_DZM,C_NAME from TB_SYSTEM_DZM_DD where N_ID in
(select N_ID from TB_SYSTEM_DZM_DD
where N_ID in (select N_ID from TB_USER_DZM_DATA
where C_USERID='cg143')
--try it
select N_ID from TB_SYSTEM_DZM_DD
where N_ID in (select N_ID from TB_USER_DZM_DATA
where C_USERID='cg143') and N_ID like '100%'
--这样总可以了吧
select a.N_ID,a.C_DZM,a.C_NAME from TB_SYSTEM_DZM_DD a,
(select sub(N_ID,0,3) nn from TB_USER_DZM_DATA
where C_USERID='cg143') b
where subStr(N_ID,0,3)=b.nn
N_ID C_DZM C_NAME C_INFO
------------------- ------------ -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
2 110000 北京 全国
2 110100 市辖区 市辖区
2 110101 东城区 北京市东城区
2 110102 西城区 北京市西城区
2 110103 崇文区 北京市崇文区
2 110104 宣武区 北京市宣武区
2 110105 朝阳区 北京市朝阳区
2 110106 丰台区 北京市丰台区
2 110107 石景山区 北京市石景山区
2 110108 海淀区 北京市海淀区
2 110109 门头沟区 北京市门头沟区
2 110111 房山区 北京市房山区
2 110112 通州区 北京市通州区
2 110113 顺义区 北京市顺义区
2 110114 昌平区 北京市昌平区
2 110200 县 县
2 110224 大兴县 北京市大兴县
2 110226 平谷县 北京市平谷县
2 110227 怀柔县 北京市怀柔县
19 rows selected
--没看清楚
select a.N_ID,a.C_DZM,a.C_NAME from TB_SYSTEM_DZM_DD a,
(select N_ID,sub(C_DZM,0,3) nn from TB_USER_DZM_DATA
where C_USERID='cg143') b
where subStr(C_DZM,0,3)=b.nn and a.N_ID=b.N_ID
2 from TB_SYSTEM_DZM_DD a, tb_user_dzm_data b
3 where b.c_userid = 'cg143'
4 and a.n_id <>
5 (select n_id from tb_user_dzm_data where c_userid = 'cg143')
6 ;
N_ID C_DZM C_NAME C_INFO
------------------- ------------ -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
2 110100 市辖区 市辖区
2 110101 东城区 北京市东城区
2 110102 西城区 北京市西城区
2 110103 崇文区 北京市崇文区
2 110104 宣武区 北京市宣武区
2 110105 朝阳区 北京市朝阳区
2 110106 丰台区 北京市丰台区
2 110107 石景山区 北京市石景山区
2 110108 海淀区 北京市海淀区
2 110109 门头沟区 北京市门头沟区
2 110111 房山区 北京市房山区
2 110112 通州区 北京市通州区
2 110113 顺义区 北京市顺义区
2 110114 昌平区 北京市昌平区
2 110200 县 县
2 110224 大兴县 北京市大兴县
2 110226 平谷县 北京市平谷县
2 110227 怀柔县 北京市怀柔县
18 rows selected
要求实现的逻辑是:当TB_USER_DZM_DATA 的c_userid = 'cg143',时,如果他拥有管理权限的地区( N_ID )
包括北京市,那么其自动拥有北京市所包括下属地区。
这样N_ID=2时,
返回结果为:
TB_USER_DZM_DATA .N_ID TB_SYSTEM_DZM_DD.C_DZM TB_SYSTEM_DZM_DD.C_NAME TB_SYSTEM_DZM_DD.N_ID
2 110000 北京市 2
2 110100 市辖区 3
2 110101 东城区 4
......
2 110227 怀柔县 20牛人就请留下牛印呀。呀!!!!!!!!!!!!!!!!!!!!1
TB_USER_DZM_DATA .N_ID的字段数据来源于TB_SYSTEM_DZM_DD.N_ID 字段,但若这两者等值关联肯定不对。
--意思就是查TB_SYSTEM_DZM_DD表中和TB_USER_DZM_DATA 表(N_ID)对应C_Name所管辖的所有区域
--地区代码的前4位会一样吧,那就是'1001'代表北京,可能'1002'就是天津了,我的理解对?
select tt2.N_ID,tt1.C_DZM,tt1.C_NAME from tt1,
(select N_ID,C_Name from TB_SYSTEM_DZM_DD
where N_ID in select N_ID from TB_USER_DZM_DATA
and C_USERID='cg143') tt2
where substr(tt1,1,4)=sub(tt2,1,4)
CREATE TABLE TB_SYSTEM_DZM_DD
(
N_ID NUMBER(19) NOT NULL,
C_DZM VARCHAR2(6 CHAR),
C_NAME VARCHAR2(100 CHAR),
C_INFO VARCHAR2(200 CHAR)
);
CREATE TABLE TB_USER_DZM_DATA
(
N_BH NUMBER(18),
C_USERID VARCHAR2(32 CHAR) NOT NULL,
N_ID NUMBER(18) NOT NULL
)
数据情况:
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
2, '110000', '北京', '全国');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
3, '110100', '市辖区', '市辖区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
4, '110101', '东城区', '北京市东城区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
5, '110102', '西城区', '北京市西城区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
6, '110103', '崇文区', '北京市崇文区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
7, '110104', '宣武区', '北京市宣武区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
8, '110105', '朝阳区', '北京市朝阳区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
9, '110106', '丰台区', '北京市丰台区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
10, '110107', '石景山区', '北京市石景山区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
11, '110108', '海淀区', '北京市海淀区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
12, '110109', '门头沟区', '北京市门头沟区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
13, '110111', '房山区', '北京市房山区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
14, '110112', '通州区', '北京市通州区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
15, '110113', '顺义区', '北京市顺义区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
16, '110114', '昌平区', '北京市昌平区');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
17, '110200', '县', '县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
18, '110224', '大兴县', '北京市大兴县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
19, '110226', '平谷县', '北京市平谷县');
INSERT INTO TB_SYSTEM_DZM_DD ( N_ID, C_DZM, C_NAME, C_INFO ) VALUES (
20, '110227', '怀柔县', '北京市怀柔县'); INSERT INTO TB_USER_DZM_DATA ( N_BH, C_USERID, N_ID ) VALUES (
1, 'cg143', 2); 现在要这两个表关联输出结果要求,当C_USERID=’cg143’时: 返回结果为:
TB_USER_DZM_DATA .N_ID TB_SYSTEM_DZM_DD.C_DZM TB_SYSTEM_DZM_DD.C_NAME TB_SYSTEM_DZM_DD.N_ID
2 110000 北京市 2
2 110100 市辖区 3
2 110101 东城区 4
......
2 110227 怀柔县 20 TB_USER_DZM_DATA .N_ID的字段数据来源于TB_SYSTEM_DZM_DD.N_ID 字段牛人留牛印
SELECT a.n_id, b.*
FROM tb_user_dzm_data a, tb_system_dzm_dd b
WHERE INSTR (b.c_dzm, (SELECT SUBSTR (b.c_dzm, 0, 3)
FROM tb_user_dzm_data a, tb_system_dzm_dd b
WHERE a.n_id = b.n_id AND a.c_userid = 'cg143')) = 1
AND a.c_userid = 'cg143'
tb_system_dzm_dd 中c_dzm的特点是两位表示一层,
省级代码为后四位一定是0000
市级代码为后两位一定是00
六位代码表示 省/市/县三级
--在自己机器上测试了下,可以通过,去试下吧。希望以后不要在说类似的话()。
select tt2.N_ID,tt1.C_DZM,C_NAME from TB_SYSTEM_DZM_DD tt1,
(select N_ID,C_DZM from TB_SYSTEM_DZM_DD
where N_ID in (select N_ID from TB_USER_DZM_DATA
where C_USERID='cg143')) tt2
where substr(tt1.c_DZM,1,3)=substr(tt2.c_DZM,1,3)
2 from TB_SYSTEM_DZM_DD a, tb_user_dzm_data b
3 where substr(a.c_dzm, 1, 2) =
4 (select substr(a.c_dzm, 1, 2)
5 from TB_SYSTEM_DZM_DD a, tb_user_dzm_data b
6 where a.n_id = b.n_id
7 and b.c_userid = 'cg143')
8 ;
N_ID C_DZM C_NAME N_ID
------------------- ------------ -------------------------------------------------------------------------------- --------------------
2 110000 北京 2
2 110100 市辖区 3
2 110101 东城区 4
2 110102 西城区 5
2 110103 崇文区 6
2 110104 宣武区 7
2 110105 朝阳区 8
2 110106 丰台区 9
2 110107 石景山区 10
2 110108 海淀区 11
2 110109 门头沟区 12
2 110111 房山区 13
2 110112 通州区 14
2 110113 顺义区 15
2 110114 昌平区 16
2 110200 县 17
2 110224 大兴县 18
2 110226 平谷县 19
2 110227 怀柔县 20
2 110227 怀柔县 20
20 rows selected
INSERT INTO TB_USER_DZM_DATA ( N_BH, C_USERID, N_ID ) VALUES (
2, 'cg143', 51);
INSERT INTO TB_USER_DZM_DATA ( N_BH, C_USERID, N_ID ) VALUES (
3, 'cg143', 77);
INSERT INTO TB_USER_DZM_DATA ( N_BH, C_USERID, N_ID ) VALUES (
4, 'cg143', 264);