有3个表 
表a 
aId,aName,bId,cId表b
bId,bName表c
cId,cName现在要将b,c 2个表中的bId,cId写到a表中去,写入之前 a表中的bId,cId都是空值
界面上初始的列表要求显示:
aId,aName,bName,cName通过修改获取到bId,bName,cId,cName 然后将bId,cId写到a表中。
问题:
初始界面列表显示时3个表的sql关联应该怎么写?
谢谢了 在线等.

解决方案 »

  1.   

    你想用sql,还是hibernate来做?
      

  2.   

    select a.aid,a.aname,b.bname,c.cname  from A a,B b,C c where a.bid=b.bid and a.cid = c.cid
      

  3.   


    select a.aid,a.aname,b.bname,c.cname from a,b,c where a.bid = b.bid and a.cid = c.cid;
      

  4.   

    select  distinct  a.aid,a.aname,b.bname,c.cname from A a,B b,C c where a.bid=b.bid and a.cid = c.cid
      

  5.   

    select a.aid,a.aname,b.bname,c.cname from a,b,c where a.bid = b.bid and a.cid = c.cid;
    如果需要用hibernate,请说明!
      

  6.   

    谢谢大家的回复!
    这个语句是当a表中的 bId,cId 有值的时候可以用 但是如果这2个字段没有写入值之前 应该怎么查?
      

  7.   

    你意思 当把a表中的 bId,cId 为空的查询出来?
      

  8.   

    select a.aid,a.aname,b.bname,c.cname from a,b,c where a.bid = b.bid and a.cid = c.cid;
      

  9.   

    不理解LZ给出的问题的思路,
    是不是要在a表中把b表数据和c表数据整合成一条数据啊?!还是怎么的?
    例如:
    a表:
    aId  |  aName  |  bId  |  cId  
     1   |   a     |   1   |  2
    b表:
    bId  |  bName
     1   |   a
    c表:
    cId  |  cName
     1   |   b
     2   |   a
    例如结束。
    是否是这要求啊?
      

  10.   

    select 
    a.aid,
    a.aname,
    b.bname,
    c.cname 
    from 
    a left join b on a.bid = b.bid 
    left join c on a.cid = c.cid
      

  11.   

    你可以吧 B和C 作为A的一个对象属性 
    直接查A表就行了 然后判断B C 是否为空 不为空就拿出name属性
    如果B C 数据量的话 可以延迟加载
      

  12.   

    OK,我猜你是同时往三个表插入记录。这样做:
    先插入b表,取回刚刚服务器自动生成的id值待用
    再插入c表,取回刚刚服务器自动生成的id值待用
    将这两个值update或insert到a表中。一旦三个表的数据都处理好了,就用楼上那些Select语句查询数据库好了。
      

  13.   

    不知道你要表达什么意思,Oracle判断某个字段是否为null,为null则为相应值的函数是nvl
      

  14.   

    没明白,3表好歹有个啥关系吧,要么根据id,要么根据name,啥关系都没说,不知道上面写sql的看没看明白楼主啥问题
      

  15.   

    select a.aid,a.aname,b.bname,c.cname from a,b,c where a.bid = b.bid and a.cid = c.cid
      

  16.   

    select a.aid,a.aname,b.bname,c.cname from a,b,c where a.bid = b.bid and a.cid = c.cid正解,如果a表中没有B、C表中的ID,页面自然不会显示,不一定非要外键关联。
      

  17.   


    主观臆断,人家要是根据name更新id,然后再显示呢?
      

  18.   

    select * from (
    select aID,aName from a
    ) as aa,
    (
    select bName from b
    ) as bb,
    (
    select cName from c
    ) as cc不用谢了
      

  19.   

    各位 不好意思 可能是我没有说清楚 现在a表:aId,aName,bId,cId 
    界面上要显示成
    aId,aName,bName,cNamebName,cName分别是b表和c表中的2个字段  再没有写入a表之前 a表中的这2个字段是空的 
    那界面上显示列表的时候 就应该是  aId,aName,null,null当对记录进行修改的时候 就获取到bId,cId 写入到a表里 再次刷新的时候 有值的  就通过关联显示aId,aName,bName,cName 其他记录没有写入的 依然显示成aId,aName,null,null
    现在就是要这种效果。  
      

  20.   


    楼主试试
    select a.aId,a.aName,b.bName,c.cName from a a,b b,c c where a.bid=b.bid(+) and a.cid=c.cid(+)