a表结构:keyid,tabname 存储表名和该表某列主键,表名是b,c,d中一个
另有三个表b,c,d,都有列id,value
现在我要写一个sql语句,表名是不定的,由a表中的tabname列值决定, 去关联表b,或c,或d大意是这样的:
Select a.*,x.*  from a left join [a.tabname] x on a.keyid=x.Id
但我这样写显然不对,请问高手有没有办法写出来!

解决方案 »

  1.   

    写成查询字符串,用exec('查询字符串')来执行
    其中就可以加参数表名,也就是所谓的动态表名.set str='select * from '+@表名变量
    exec(str)
      

  2.   

    libinguest 的意思,我是要分两步,先得到表名值,然后赋给这个sql语句?可是我表名是由这个sql语句列值决定呀!
      

  3.   

    先得到表名.前台也可以用exec来执行
      

  4.   

    Select a.*,x.*  
    from a left join 
    (SELECT CASE WHEN [a.tabname]='FD' THEN A WHEN [a.tabname]='FD2' THEN B WHEN [a.tabname]='FD1' THEN C) x on a.keyid=x.Id 
      

  5.   

    Select a.*,x.*  
    from a left join 
    (SELECT CASE WHEN [a.tabname]='FD' THEN A WHEN [a.tabname]='FD2' THEN B WHEN [a.tabname]='FD1' THEN C END ) x on a.keyid=x.Id 少打了个END
      

  6.   

    select 
    b.*
    ,c.*
    from a
    left join b on case when a.tabname = 'b' then a.keyid else 0 end = b.id
    left join c on case when a.tabname = 'c' then a.keyid else 0 end = c.id
      

  7.   

    SQL77:提示:列名a.tabname无效。
      

  8.   


    Select a.*,x.*  
    from a left join 
    (SELECT CASE WHEN [a.tabname]='FD' THEN B WHEN [a.tabname]='FD2' THEN C WHEN [a.tabname]='FD1' THEN D END  FROM A ) x on a.keyid=x.Id晕了
      

  9.   


    --用这个查询出来的结果可能会与a表中的顺序不一样,但是将下面的结果再作为一个表和a表连接,即a left join此表,那么顺序应该一样了-- 
    select * from b tabb,a taba where tabb.id = taba.keyid and taba.tabname = 'b'
    union
    select * from c tabc,a taba where tabc.id = taba.keyid and taba.tabname = 'c'
    union
    select * from d tabd,a taba where tabd.id = taba.keyid and taba.tabname = 'd'
      

  10.   

    不明白为什么你B,C,D三个表要拆开,放在一起,加一个字段标明每一条记录属于BCD中哪一类不好吗?
    能简单实现的问题尽量简单实现,否则后期维护会死人。8楼的代码就算可以用,也不推荐
      

  11.   

    不明白为什么你B,C,D三个表要拆开,放在一起,加一个字段标明每一条记录属于BCD中哪一类不好吗?
    能简单实现的问题尽量简单实现,否则后期维护会死人。8楼的代码就算可以用,也不推荐
    ============================
    当然问题不是这么简单,三个表完全结构不同,功能不同,为什么要放一起。
      

  12.   

    问题复杂度增加了点,增加取一个变量列:a表结构:keyid,tabname 存储表名和该表某列主键,表名是b,c,d中一个
    另有三个表b,c,d,都有列id,value
    现在我要写一个sql语句,表名是不定的,由a表中的tabname列值决定, 去关联表b,或c,或d
    还要取出b或c或d表中的某列值,列名是由a表中列名为col的值决定的大意是这样的:
    Select a.*,x.[a.col]  from a left join [a.tabname] x on a.keyid=x.Id实在不行也可以用存储过程,请指点
      

  13.   


     LZ  我建议你 有很多逻辑 放在PRO里面写 会简化很多问题的。 分步不是很好。LZ 换个思维 你就明白了。
      

  14.   

    假如一行x.[a.col]是id,而另一行是value,难道要将这两行显示在同一列.