数据表:
create table BBS_Users
(
userName varchar2(20) primary key,
passWord varchar(20) not null,
email varchar2(50) not null
);
insert into BBS_Users values('admin','admin','[email protected]');
insert into BBS_Users values('manager','manager','[email protected]');create table BBS_Messages
(
messId number(4) primary key,
toName varchar2(20) not null,
fromName varchar2(20) not null,
title varchar2(100) not null,
content varchar2(400) not null,
pastTime timesTamp not null,
constraint FK_messages_from foreign key(fromName) references BBS_Users(userName),
constraint FK_messages_to foreign key(toName) references BBS_Users(userName)
);
insert into BBS_Messages values(1,'admin','waghito','aaaaaa','aaaaaaaaaa',to_date('2012-2-14 12:32:29','yyyy-mm-dd hh24:mi:ss'));
insert into BBS_Messages values(2,'waghito','admin','bbbbbb','bbbbbbbbbb',to_date('2012-2-14 12:40:29','yyyy-mm-dd hh24:mi:ss'));实现
当toName=userName 输出user.userName,message.fromName
当fromName=userName 输出user.userName,messsage.toName求教育

解决方案 »

  1.   

    使用case when或者decode
      

  2.   

    insert into BBS_Messages values(1,'admin','waghito','aaaaaa','aaaaaaaaaa',to_date('2012-2-14 12:32:29','yyyy-mm-dd hh24:mi:ss'));
    insert into BBS_Messages values(2,'waghito','admin','bbbbbb','bbbbbbbbbb',to_date('2012-2-14 12:40:29','yyyy-mm-dd hh24:mi:ss'));--------------------
    外键'waghito' 确保BBS_Users 列userName 存在键'waghito' 。select bu.userName,bm.fromName from BBS_Users bu inner join BBS_Messages bm
    on bu.userName=bm.toName where bm.toName='userName'select bu.userName,bm.toName from BBS_Users bu inner join BBS_Messages bm
    on bu.userName=bm.fromName where bm.fromName='userName'
     
      

  3.   

    看错题意了,应该将两者
    select bu.userName,bm.fromName from BBS_Users bu inner join BBS_Messages bm
    on bu.userName=bm.toName 
    union
    select bu.userName,bm.toName from BBS_Users bu inner join BBS_Messages bm
    on bu.userName=bm.fromName
      

  4.   

    你这写的东西你有拿到数据库里运行过没?
    insert into BBS_Messages values(1,'admin','waghito','aaaaaa','aaaaaaaaaa',to_date('2012-2-14 12:32:29','yyyy-mm-dd hh24:mi:ss'));
    insert into BBS_Messages values(2,'waghito','admin','bbbbbb','bbbbbbbbbb',to_date('2012-2-14 12:40:29','yyyy-mm-dd hh24:mi:ss'));
    这两条insert语句就不可能插入得进去,你这两表存在外键约束 而依赖表根本就不存在'waghito'这用户。
    因为有外键约束
    实现
    当toName=userName 输出user.userName,message.fromName---这时候user.userName=toName
    当fromName=userName 输出user.userName,messsage.toName---这时候user.userName=fromName
    select toName,fromName from BBS_Messages where toName='xxxxx' or fromName='xxxxx'
    就可以解决你的需求
      

  5.   

    6楼的大侠可能误解我的意思了
    我打个比方
    我要获取的是所有和userName(admin)有关的数据
    假如Messages的fromName字段是admin 则输出Messages表的toName字段和toName的email
    假如Messages的toName字段是admin 则输出Messages表的fromName字段和fromName的email
      

  6.   

    select userName,email from BBS_user 
        where userName=(select toName from BBS_messages where  fromName='xxxx' )
           or userName=(select fromName from BBS_Messages where toName='xxxx');
      

  7.   

    错了,返回的数据应该会存在多条的记录需要把=改成IN 
    userName=(select toName from BBS_messages where fromName='xxxx' )

    userName=(select fromName from BBS_Messages where toName='xxxx');
    改成
    userName in (select toName from BBS_messages where fromName='xxxx' )

    userName in (select fromName from BBS_Messages where toName='xxxx');
      

  8.   

    SELECT DECODE(BM.fromName,'xxxx',BM.TOName,BM.fromName) AS userName,
      BU.email 
      From BBS_Messages BM INNER JOIN BBS_Users BU
    ON DECODE(BM.fromName,'xxxx',BM.TOName,BM.fromName) = BU.userName 
    WHERE (BM.fromName='xxxx'  OR BM.TOName='xxxx' )