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
但我这样写显然不对,请问高手有没有办法写出来!
另有三个表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
但我这样写显然不对,请问高手有没有办法写出来!
其中就可以加参数表名,也就是所谓的动态表名.set str='select * from '+@表名变量
exec(str)
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
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
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
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晕了
--用这个查询出来的结果可能会与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'
能简单实现的问题尽量简单实现,否则后期维护会死人。8楼的代码就算可以用,也不推荐
能简单实现的问题尽量简单实现,否则后期维护会死人。8楼的代码就算可以用,也不推荐
============================
当然问题不是这么简单,三个表完全结构不同,功能不同,为什么要放一起。
另有三个表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实在不行也可以用存储过程,请指点
LZ 我建议你 有很多逻辑 放在PRO里面写 会简化很多问题的。 分步不是很好。LZ 换个思维 你就明白了。