sql语句A:select a.* from area a inner join area b on a.code=b.sup_level where b.sup_level='0102'
结果A
CODE CODE_NAME CODE_DESC SUP_LEVEL SERIES USER_ID
0102 01
0102 01sql语句B:select b.* from area a inner join area b on a.code=b.sup_level where b.sup_level='0102'结果B: 
CODE CODE_NAME CODE_DESC SUP_LEVEL SERIES USER_ID
010201 中国 0102
010202 日本 0102问:
    (1):关于inner join 时 到底哪个表是主表?
    (2):上面的area a 和area b 有什么区别?
    (3):上面的结果B是我要的结果,怎么使结果就是B那样,不出现A的情况?
本人菜鸟一个,望大大们帮忙。

解决方案 »

  1.   

    把where改成and试试,在inner join 的情况下,and 和where 的作用应该是相等的
      

  2.   

    其实两个语句效果是一样的,只是楼主取得字段不同而已。
    做个例子:CREATE TABLE AREA(code VARCHAR2(10),sup_level VARCHAR2(10));
    INSERT INTO AREA VALUES('1001','1001');
    INSERT INTO AREA VALUES('1002','1001');
    INSERT INTO AREA VALUES('1003','1001');
    INSERT INTO AREA VALUES('1004','1007');
    INSERT INTO AREA VALUES('1005','1009');
    INSERT INTO AREA VALUES('1006','1011');
    INSERT INTO AREA VALUES('1007','1013');
    INSERT INTO AREA VALUES('1008','1015');
    INSERT INTO AREA VALUES('1009','1017');
    COMMIT;
    SQL> select a.* from area a inner join area b on a.code=b.sup_level where b.sup_
    level='1001';CODE       SUP_LEVEL
    ---------- ----------
    1001       1001
    1001       1001
    1001       1001SQL> select b.* from area a inner join area b on a.code=b.sup_level where b.sup_
    level='1001';CODE       SUP_LEVEL
    ---------- ----------
    1001       1001
    1002       1001
    1003       1001SQL> select A.*,b.* from area a inner join area b on a.code=b.sup_level where b.
    sup_level='1001';CODE       SUP_LEVEL  CODE       SUP_LEVEL
    ---------- ---------- ---------- ----------
    1001       1001       1001       1001
    1001       1001       1002       1001
    1001       1001       1003       1001其实是一样的语句,看你取那个字段了。
      

  3.   

    本来想标记上颜色的,谁知道出来是[color=#FF0000]这个代码,楼主把这个代码忽略掉吧,
    最后一个SQL前两列是A.*取到的,后两列是B.*取到的。
      

  4.   

    测试了一下,结果是你就应该使用b.*,a和b分别为area的别名,你把a和b看作两张表处理然后对照一下就能看明白了
    我也学习了一下
      

  5.   

     (1):关于inner join 时 到底哪个表是主表?
        (2):上面的area a 和area b 有什么区别?
        (3):上面的结果B是我要的结果,怎么使结果就是B那样,不出现A的情况? 
    楼住仔细看下3楼的数据。结论是你的2个sql是一样的,可以把a.*,b.*全列出来看就明白了。
    你取的字段不同造成的结果不同,或者说是where b.sup_level='0102' 造成b.*出来的结果全是sup_level='0102' (1)没有主表之说,我是这样认为的
    (2)area b 出现的记录要符合  b.sup_level='0102' 这个条件
    (3)列出你想要的字段,就象你的第2个sql你可以把条件where b.sup_level='0102' 换成 where a.sup_level='0102'
    再看下结果,就会发现结果互换了