小弟有三个数据表如下:
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)
请各位高手指点,谢谢!
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)
请各位高手指点,谢谢!
from admin,teacher,news
where news.adminid = admin.adminid (+)
and news.teacherid = teacher.teacherid(+)
from admin,teacher,news
where news.adminid = admin.adminid (+)
and news.teacherid = teacher.teacherid(+)
and type_news_id = 'your_type_news_id'
我刚才试一下,没有语法错误,但是查询结果为空,事实上这是不可能。
我尝试着把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就重复,别的就不会重复.
from news
left join admin on news.adminid = admin.adminid
left join teacher news.teacherid = teacher.teacherid