小弟有三个数据表如下:
admin:
adminid,admin_name
teacher:
teacherid,teacher_name
news:
newsid,teacherid,adminid,type_news_id
其中,news表里的teacherid和adminid不能同时有值,也既,新闻要么是teacher发布的,要么是admin发布的,前面两个表里放的是teacher和admin的基本信息。
现在,我想在已知且只知道type_news_id的情况下,对数据库进行查询,选出以下几个数据项:
newsid,发布者(根据新闻是谁发的,来分别显示teacher_name/admin_name)
请各位高手指点,谢谢!

解决方案 »

  1.   

    select newsid,nvl(admin_name,teacher_name)
    from admin,teacher,news
    where news.adminid = admin.adminid (+)
    and news.teacherid = teacher.teacherid(+)
      

  2.   

    select newsid,nvl(admin_name,teacher_name)
    from admin,teacher,news
    where news.adminid = admin.adminid (+)
    and news.teacherid = teacher.teacherid(+)
    and type_news_id = 'your_type_news_id'
      

  3.   

    谢谢两位!
    我刚才试一下,没有语法错误,但是查询结果为空,事实上这是不可能。
    我尝试着把id相等那两条约束条件之前的=改为OR,并用括号包起来,如下
    select newsid,nvl(admin_name,teacher_name)
    from admin,teacher,news
    where (news.adminid = admin.adminid (+)
    or news.teacherid = teacher.teacherid(+))
    and type_news_id = 'your_type_news_id'
    发现能查询到数据了。
    我在数据库中的type_news_id分别为1,2,3,4。
    当我分别用这些去测试的时候发现,除了4不好使之外,另外三个都没问题。
    而且取值为4时,也不是完全错误,只是查询出来的每条结果都重复了一遍,而且admin_name和teacher_name都同时出现了.
    但是我看了看,实在是看不出来为什么会重复,为什么取值为4就重复,别的就不会重复.
      

  4.   

    本人观察了一下,好象是在news表中,如果teacherid有值而adminid为空,就没问题;如果颠倒过来就会出现重复!
      

  5.   

    分别用teacherid和adminid做两个查询,然后用 Union 串联起来
      

  6.   

    select newsid,nvl(admin_name,teacher_name), news.*
    from news
    left join admin on news.adminid = admin.adminid 
    left join teacher news.teacherid = teacher.teacherid