请教各位老师一个多表关联的问题。

小小小小小小学生 2018-02-03 02:34:38
有一个临时表3万多行,其中有两列:
A B 两列,要求判断A列的值,大概有30个左右可能,如果为1,则关联表1,为2,则关联表2,以此类推,我想到的苯办法是关联所有表,但是好像会严重影响效率,所以在这里请教各位老师,能否根据A值来判断关联哪个表呢?
...全文
339 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
非常感谢楼上各位老师,谢谢!问题已经得到解决!
ChinaITOldMan 2018-02-07
  • 打赏
  • 举报
回复
引用 5 楼 qq_25635235 的回复:
[quote=引用 4 楼 qq_25635235 的回复:] 临时表LEFT JOIN 三十个表,用CASE WHEN 进行判定改取哪张表的值。
SELECT 
CASE  A.A  
WHEN 1 THEN T1.C
WHEN 2 THEN T2.C
WHEN 3 THEN T3.C
WHEN 4 THEN T4.C
WHEN 5 THEN T5.C
 ................
 ELSE 30 THEN T30.C
 END C
FROM
TEST A 
 LEFT JOIN T1 ON A.A = T1.A
 LEFT JOIN T2 ON A.A = T2.A
 LEFT JOIN T3 ON A.A = T3.A
 LEFT JOIN T4 ON A.A = T4.A
 LEFT JOIN T5 ON A.A = T5.A
 ................
 LEFT JOIN T30 ON A.A = T30.A
引用 4 楼 qq_25635235 的回复:
修改下(如果A列的值在1~30外,直接返回NULL):
SELECT 
CASE  A.A  
WHEN 1 THEN T1.C
WHEN 2 THEN T2.C
WHEN 3 THEN T3.C
WHEN 4 THEN T4.C
WHEN 5 THEN T5.C
 ................
 WHEN 30 THEN T30.C
 END C
FROM
TEST A 
 LEFT JOIN T1 ON A.A = T1.A
 LEFT JOIN T2 ON A.A = T2.A
 LEFT JOIN T3 ON A.A = T3.A
 LEFT JOIN T4 ON A.A = T4.A
 LEFT JOIN T5 ON A.A = T5.A
 ................
 LEFT JOIN T30 ON A.A = T30.A
[/quote] 这个写法估计不行,楼主估计要的是动态语句才能实现,他应该只是两个表关联
扬静宁 2018-02-06
  • 打赏
  • 举报
回复
引用 4 楼 qq_25635235 的回复:
临时表LEFT JOIN 三十个表,用CASE WHEN 进行判定改取哪张表的值。
SELECT 
CASE  A.A  
WHEN 1 THEN T1.C
WHEN 2 THEN T2.C
WHEN 3 THEN T3.C
WHEN 4 THEN T4.C
WHEN 5 THEN T5.C
 ................
 ELSE 30 THEN T30.C
 END C
FROM
TEST A 
 LEFT JOIN T1 ON A.A = T1.A
 LEFT JOIN T2 ON A.A = T2.A
 LEFT JOIN T3 ON A.A = T3.A
 LEFT JOIN T4 ON A.A = T4.A
 LEFT JOIN T5 ON A.A = T5.A
 ................
 LEFT JOIN T30 ON A.A = T30.A
引用 4 楼 qq_25635235 的回复:
修改下(如果A列的值在1~30外,直接返回NULL):
SELECT 
CASE  A.A  
WHEN 1 THEN T1.C
WHEN 2 THEN T2.C
WHEN 3 THEN T3.C
WHEN 4 THEN T4.C
WHEN 5 THEN T5.C
 ................
 WHEN 30 THEN T30.C
 END C
FROM
TEST A 
 LEFT JOIN T1 ON A.A = T1.A
 LEFT JOIN T2 ON A.A = T2.A
 LEFT JOIN T3 ON A.A = T3.A
 LEFT JOIN T4 ON A.A = T4.A
 LEFT JOIN T5 ON A.A = T5.A
 ................
 LEFT JOIN T30 ON A.A = T30.A
扬静宁 2018-02-06
  • 打赏
  • 举报
回复
临时表LEFT JOIN 三十个表,用CASE WHEN 进行判定改取哪张表的值。
SELECT 
CASE  A.A  
WHEN 1 THEN T1.C
WHEN 2 THEN T2.C
WHEN 3 THEN T3.C
WHEN 4 THEN T4.C
WHEN 5 THEN T5.C
 ................
 ELSE 30 THEN T30.C
 END C
FROM
TEST A 
 LEFT JOIN T1 ON A.A = T1.A
 LEFT JOIN T2 ON A.A = T2.A
 LEFT JOIN T3 ON A.A = T3.A
 LEFT JOIN T4 ON A.A = T4.A
 LEFT JOIN T5 ON A.A = T5.A
 ................
 LEFT JOIN T30 ON A.A = T30.A
t101lian 2018-02-05
  • 打赏
  • 举报
回复
把需要 LEFT JOIN的 三十个表 Union all 到一张表,然后再去与临时表关联查询。
  • 打赏
  • 举报
回复
临时表LEFT JOIN 三十个表,依次显示三十个关联表的C列(即T1.C,T2.C,T3.C)最后在用ISNULL判断,这个方案数据是对的,但是我感觉效率太低了。
二月十六 版主 2018-02-03
  • 打赏
  • 举报
回复
临时表left join两个表吗?得到的数据是对的?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧