当前位置:  开发笔记 > 数据库 > 正文

根据标志,通过SQL从不同的表中选择

如何解决《根据标志,通过SQL从不同的表中选择》经验,为你挑选了1个好方法。

我有一个脚本从更大的表中提取某些数据,其中一个字段特别是定期更改,例如

SELECT CASE @Flag WHEN 1 THEN t.field1 WHEN 2 THEN t.field2 WHEN 3 
       THEN t.field3 END as field,
       ...[A bunch of other fields]
FROM table t

但是,现在问题是我想对数据进行其他处理.我想找出最有效的方法.我需要有一些方法来获取标志,所以我知道我正在谈论由正确的字段切片的数据.

我正在玩一个可能的解决方案(主要是看看会发生什么)是将脚本的内容转储到一个表函数中,该表函数已经传递给它,然后对函数的结果使用SELECT查询.我设法让它工作,但它明显慢于......

显而易见的解决方案,也许是处理器周期的最有效使用:创建一系列缓存表,一个用于三个标志值中的每一个.然而,问题是找到一些从正确的缓存表中提取数据以执行计算的方法.显而易见但不正确的反应就像是

SELECT CASE @Flag WHEN 1 THEN table1.field WHEN 2 THEN table2.field WHEN 3 
       THEN table3.field END as field,
       ...[The various calculated fields]
FROM table1, table2, table3

不幸的是,很明显,这会产生一个巨大的交叉连接 - 这根本不是我想要的结果.

有谁知道如何将这个交叉连接变成"只看x桌"?(不使用动态SQL,这会让事情难以处理?)或者另一种解决方案,那仍然相当快速?

编辑:这是否是一个很好的理由,我试图实现的想法是没有三个基本相同的查询,只有表格不同 - 每当对逻辑进行更改时,必须进行相同的编辑.这就是为什么我到目前为止避免了"让国旗完全分开"的原因......



1> Bill Karwin..:

我认为您需要@Flag完全退出查询,并使用它来决定运行三个单独的SELECT语句中的哪一个.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有