B表,人员表,有字段人员ID,姓名等等。
A表,(一些信息字段),创建人,最后修改人,审核人,等等人,同是B表的人员ID。请教,如果设计这二表,使得查询时方便将A表所有的人员ID字段转换为实际的姓名。

解决方案 »

  1.   

    SF.select * from A表 left join B表 on A表.人员ID=B表.人员ID
      

  2.   

    方式1:select ……
          , c.姓名 as 创建人
          , d.姓名 as 最后修改人
          , e.姓名 as 审核人
    from A表 as a left join B表 as c on a.创建人=c.id
                  left join B表 as d on a.最后修改人=d.id
                  left join B表 as e on a.审核人=e.id
      

  3.   

    我写详细点吧.
    B表: UserID,UserName
    A表: UserFile,CreateUserID,LastSaveUserID,CheckedUserID,PrintUserIDA表的后四个字段内容均为B表的userid,
    请教,如何设计表结构,或如果查询得到
    UserFile,UserName,UserName,UserName,UserName
      

  4.   

    方式2select …… 
          , (select 姓名 from  B表 where id=a.创建人) as 创建人 
          , (select 姓名 from  B表 where id=a.最后修改人) as 最后修改人 
          , (select 姓名 from  B表 where id=a.审核人) as 审核人 
    from A表 as a 
      

  5.   

    方式3数据库中建函数,然后在sql中使用
    select …… 
          , fun_GetName(a.创建人) as 创建人 
          , fun_GetName(a.最后修改人) as 最后修改人 
          , fun_GetName(a.审核人) as 审核人 
    from A表 as a 
      

  6.   

    若是只要查询,楼主的设计没问题。
    如有其它的输入的限制,最好加个group,人员表对应group。
    限制谁可建立/修改/审核。
      

  7.   

    sql server么??加个xml字段好了其实你之所以问这个问题,我想考虑的方式是这样的,第一是查询不方便,不过用视图可以解决第二种情况是效率优化所以通常情况下, 考虑冗余方案, 如果只是从数据库方面设计...当然这个也要看业务需求比如说id要被检索的情况,那就不适合把id放在xml字段中当然用冗余的情况有个问题就是在insert与update人员的时候很不方便
      

  8.   

    如果改为以下设计:
    A表: UserFile,CreateUserID,CreateUserName,
         LastSaveUserID,LastSaveUserName,
         CheckedUserID,CheckedUserName,
         PrintUserID,PrintUserName在记录保存和修改时,直接把名字也存进去。
    这样不用建视图来查询。
    这样的数据冗余应该可以接受吧? 
      

  9.   


    只要你在insert update的时候不嫌烦,就可以接收....
      

  10.   

    还是建视图方便
    create or replace view v_c as
    select A.UserFile,
    (select B.UserName  from B where B.UserID=A.CreateUserID) as UserName1,
    (select B.UserName  from B where B.UserID=A.LastSaveUserID) as UserName2,
    (select B.UserName  from B where B.UserID=A.CheckedUserID) as UserName3,
    (select B.UserName  from B where B.UserID=A.PrintUserID) as UserName4
    from A
      

  11.   


    这种设计方式要看情况,用户id、name这么来用感觉没有必要,显得太罗嗦,
    我这里这么用是一些规格编码,为了防止编码出错,把内容也加入,为了便于出错时查找原因方便
      

  12.   


    不提倡lz这种做法,不应该为了看着方便、用着顺手就这样设计,这样code的作用就没有意义了,结构也不清晰,就像我们编程一样,不能为了简便就让代码逻辑结构不清晰。
      

  13.   


    那你想得太简单了,可以在update的时候一并修改。你注意一下我的回答,update的时候需要注意一下,如果能忍受这样的代价就这么做
      

  14.   

    哈哈,我以前就是用的楼主最开始的方法,然后写成函数GetNameByID()