求一条 sql 语句

A表中有 toId字段 , toTable 字段 。

toTable 字段存放的是表的名称( 需要将A表 LEFT JOIN toTable字段存放的表名 )

SELECT * FROM A LEFT JOIN (A表中的toTable字段) ON A.toId = (A表中的toTable字段).id

这个sql语句应该怎样写 ? 谢谢了

阅读 3.4k
4 个回答

left join只能联接两个表,而你是要将A的不同的行联接不同的表。这种设计很别扭,拼凑出来SQL执行效能也低。不如把你的那些toTable们先整合成一个表或者view:B(toTable, id, data),再来做联接:

with B(toTable, id, data) as (
    select 'table1', id, data from table1
    union all
    select 'table2', id, data from table2
    ...)

select * from A left join B
    on A.toTable=B.toTable and A.toId=B.id

你这个只能用程序先查出表明,然后拼接sql吧

可以封装成存储过程,参数化调用表名

SELECT * FROM [TableName1] A,[TableName2] B where A.told=B.toTable

--大致语法就这样、我不知道我理解正确没有
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题