表1:
SysModel(modelId,modelName)
有3条记录
1,model1
2,model2
3,model3
表2:
modelShow(modelShowId,modelId,appointNum)
有4条记录
1,1,111
2,2,222
3,3,null
4,1,222
现在我要一条sql语句,查询出:modelId,modelName,modelShowId,appointNum的值,此查询出来的要求为
表1中所有记录必须显示,且每条记录只显示一次(即现在表1中有3条记录,查询出来的结果一定要是3条记录)
表2中,如果没有对应内容的记录,则所有值显示为空如:我要查找appointNum为111的情况
因显示如下记录
modelId,modelName,modelShowId,appointNum
1,model1,1,111
2,model2,null,null
3,model3,null,null如:我要查找appointNum为222的情况
因显示如下记录
modelId,modelName,modelShowId,appointNum
1,model1,4,222
2,model2,2,222
3,model3,null,null如:我要查找appointNum为333的情况
因显示如下记录
modelId,modelName,modelShowId,appointNum
1,model1,null,null
2,model2,null,null
3,model3,null,null
如果不限定appointNum的值,查询出来的结果
因显示如下记录
modelId,modelName,modelShowId,appointNum
1,model1,null,null
2,model2,null,null
3,model3,null,null求这条语句怎么写?

解决方案 »

  1.   


    select distinct(a.modelId) ,a.modelName ,b.modelShowId,b.appointNum SysModel a 
    left outer join modelShow b on a.modelId=b.modelId
      

  2.   

    不行呀,查出来的记录会多于3条,同一个modelId值有多条记录
      

  3.   


    create table SysModel (modelId number,modelName varchar2(10));
    insert into SysModel values (1,'model1');
    insert into SysModel values (2,'model2');
    insert into SysModel values (3,'model3');
     
    create table modelShow (modelShowId number,modelId number,appointNum number);
    insert into modelShow values (1,1,111);
    insert into modelShow values (2,2,222);
    insert into modelShow values (3,3,null);
    insert into modelShow values (4,1,222);select a.modelid,a.modelname,b.modelshowid,b.appointnum
    from SysModel a left join 
        ( select * from modelShow 
          where appointnum=222 ) b  on a.modelid=b.modelid
    order by a.modelid
        modelid  modelname modelshowid appointnum
    ------------------------------------------------
    1 1 model1 4 222
    2 2 model2 2 222
    3 3 model3
      

  4.   

    三楼乃正解
    SELECT A.MODELID, 
           A.MODELNAME, 
           B.MODELSHOWID, 
           B.APPOINTNUM
      FROM SYSMODEL A, 
           (SELECT * FROM MODELSHOW WHERE APPOINTNUM = 111) B
     WHERE A.MODELID = B.MODELID(+)
     ORDER BY A.MODELID;
      

  5.   

    如果不限定appointNum的值   
    可以传入空值 ''或者null  因为有的appointNum值为null  查询appointnum=''或者appointnum=null  和appointnum is null有区别 所以查不到数据  b表就不会返回数据了select a.modelid,a.modelname,b.modelshowid,b.appointnum
    from SysModel a left join 
        ( select * from modelShow 
          where appointnum='') b  on a.modelid=b.modelid
    order by a.modelid
        modelid  modelname modelshowid appointnum
    ------------------------------------------------
    1 1 model1
    2 2 model2
    3 3 model3