天天看点

我实在是不明白,现在求助的都这么会玩吗

  年前加了一个群,主要是玩SQL的,大家平常有什么性能差的SQL就发出来一起看看,偶尔有新手也会来问个SQL怎么写,大家也玩得挺开心。某天进来了一个求助者,然后把大家给整疯了……

  这位求助者提出的问题是:SQL中有没有可以替代 UNION ALL的写法,因为他的语句在SQL SERVER里面运行是正常的,但是放在代码里面就有问题。

  大家很奇怪,如果代码里面出现问题的话,那肯定是要去研究问题原因是什么,为什么要替代UNION ALL呢?于是有朋友追问了求助者,想知道他具体在哪个场景中出了问题,于是求助者就给了一条SQL:

  SELECT DecimalNum1 UNION ALL DecimalNum2

  我估计大家看到这条SQL的时候,第一反应就是这货不肯告诉我们实情,因为这明明就是一条可运行的SQL。但出于热心,有几个朋友还是给出了解决方案,即两个Decimal的精度不一样,建议统一处理精度,然后求助者表示这个方法不行。

  再然后有朋友提出了把它们转成varchar的方案,事实证明也是不行。

  既然转成varchar的方案都不行,那基本上可以确定不是数据类型的问题。于是我怀疑他是在这条语句外面又包了一层,语句如下:

  SELECT * FROM(

    SELECT DecimalNum1 UNION ALL DecimalNum2

  ) AS A

  只要给里面两个数据后面加个字段名就行了,这种情况不知道他验证了没有。

  让我恼火的是,这不是我头一次碰见这样的求助者,他们往往问某个问题怎么处理,但又不愿意把自己的SQL给贴出来。要说是为公司保密,那看上去也不像,难不成我们还对某个不知名公司的某个表名感兴趣吗?

  处理问题的第一步就是还原现场,可我看到太多的求助者都在刻意隐瞒着什么,就像一个杀人现场,总有无数的东西不想让别人知道。可是当大家引导着你去还原现场,你还不愿意让大家看到真相的时候,再热心的人也只能无奈地说一句爱莫能助了。