表结构
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 东城区、

解决方案 »

  1.   


    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)
      

  2.   


    --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')
      

  3.   


    --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%'
      

  4.   


    --这样总可以了吧
    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
      

  5.   

    是要这个结果不SQL> select b.n_id , a.c_dzm,a.c_name,a.c_info from TB_SYSTEM_DZM_DD a,tb_user_dzm_data b where b.c_userid='cg143';
     
                   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
      

  6.   


    --没看清楚
    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 
      

  7.   

    去掉全国那个字段?SQL> select b.n_id, a.c_dzm, a.c_name, a.c_info
      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
      

  8.   

    哎,不对呀。TB_SYSTEM_DZM_DD 表中数据多着呢,不做两表关联肯定不对
    要求实现的逻辑是:当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
      

  9.   

    水平不到,放弃正常。
    TB_USER_DZM_DATA .N_ID的字段数据来源于TB_SYSTEM_DZM_DD.N_ID 字段,但若这两者等值关联肯定不对。
      

  10.   


    --意思就是查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)
      

  11.   

    表结构 
    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 字段牛人留牛印
      

  12.   

    C_DZM的前三位应该是北京市的编码吧
    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'
      

  13.   

    不行,报ora-01427错误。急死我了
    tb_system_dzm_dd 中c_dzm的特点是两位表示一层,
    省级代码为后四位一定是0000
    市级代码为后两位一定是00
    六位代码表示 省/市/县三级
      

  14.   

    所以说你没说清楚。哈哈,还怪人坚决不赚这个分了。别说你这么简单的SQL太复杂十倍我觉得都没问题不是吹牛B,你阿。只怪你不会说话。
      

  15.   


    --在自己机器上测试了下,可以通过,去试下吧。希望以后不要在说类似的话()。
    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)
      

  16.   

    SQL> select b.N_ID, a.C_DZM, a.C_NAME, a.N_ID
      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
      

  17.   

    不对呀,因为TB_USER_DZM_DATA 表中还有其他数据,N_ID对应的是TB_SYSTEM_DZM_DD 中一个具体的县,也就是说c_dzm编码后两位不是‘00’
    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);
      

  18.   

    TB_USER_DZM_DATA 这个表是对用户授权地区表。代表这个用户可以管理那些N_ID地区。
      

  19.   

    我真是服了你了。乱七八糟的阿。你发个帖子加分再发吧。用substr,instr之类的函数可以搞定的。我下班走人了。