A表
id    loc_id    no    name
1 5 2      大
2 5 3      小
3 5 6      中小B表
id    locid     no
1       5       2
1       5       6
1       5       7Sql语句如何写才能保证 A表和B表关联,显示字段 loc_id,no,name,同时还要把B表中 no 值是7的不匹配记录也一同查询出来呢???是不是要写一个过程呢?高手指点

解决方案 »

  1.   

    select 
      a.loc_id,
      a.no,
      a.name
    from b
    left outer jion a on b.loc_id = a.loc_id and b.no = a.no
      

  2.   

    zhamx 你测试过么?不对的 
      

  3.   

    显示结果要
    loc_id    no    name
    5         2     大
    5         6     中小
    5         7     ""    
      

  4.   

    select  
      a.loc_id, 
      a.no, 
      a.name 
    from a,b 
    where b.loc_id = a.loc_id and b.no = a.no and b.no<>7
      

  5.   

    select  
      a.loc_id, 
      a.no, 
      a.name 
    from b 
    left outer join a on b.no = a.no 
      

  6.   

    你的数据表的字段有什么关系,可以说清楚一点,有两个相同的loc_id,no???
      

  7.   

    楼上的,你的也不可以.那个loc_id不只那一种,还有很多 我查询的时候要用 where loc_id = ? 限定的
      

  8.   

    NO 和 LOC_ID 都是不固定的
      

  9.   

    select 
      b.locid, 
      b.no, 
      a.name 
    from b 
    left outer join a on b.locid = a.locid and b.no = a.no 
      

  10.   

    楼主,你是想在ORACLE里用一个查询语句把两个表的记录都查出来,显示的字段为loc_id,no,name是吗?你最好把两个表的关联字段都写清楚,我只能暂时理解为两表的关联条件为:
    A.loc_id=B.loc_id and b.no = a.no不过后面那个条件你写的不清楚,有些搞不太清楚.
    "同时还要把B表中 no 值是7的不匹配记录也一起查出来"是指什么?
    你是不是想把B表中no值=7,但是在A表中无对应记录的记录也列在同一个查询结果里?
    如果是的话,应该这样写:select
      a.loc_id,
      b.no,  
      nvl(a.name,'') name  --当值为NULL时显示空串
    from
      a,b   
    where
      b.loc_id = a.loc_id(+)
      and
      b.no = a.no(+)  -- 这两个条件是用来做ORACLE的外连接
      or
      b.no = 7  -- 这是为了保证B表中只要有no=7的记录都会被列出来这个SQL语句只有一个地方要注意,就是B表中no值=7,但在A表中无对应记录的记录存在时,结果集的a.loc_id字段里面会出现NULL值.需要用NVL()函数排空,因为不知道这个字段的值类型,所以没写.你可以在此基础上修改一下再用.
      

  11.   

    谢谢各位,问题解决了! 特别感谢 "nmd002东海一狂"! 我少加了一个外连接(b.no = a.no(+))! 谢谢 马上结账
      

  12.   

    两个表的id是一回事吗,是对应的关系吗
    loc_id和locid是一回事吗
    两个表的no是一回事吗