【问题标题】:Union subquery conditioned联合子查询条件
【发布时间】:2015-05-04 00:27:44
【问题描述】:

我想从联合子查询中提出一个案例,但我无法解决。我想做这样的事情:

select t.colA, t.colB,
case when t1.colC = 1 and t2.colC=0 then 1
else t.colC end colC
from 
(
select t1.colA,t1.colB,t1.colC from table1 t1
union all
select t2.colA,t2.colB,t2.colC from table2 t2
) t

这样的事情可能吗?或者还有其他方法吗?我绝对需要那个工会和案子。

谢谢。

【问题讨论】:

  • 执行并检查 man
  • 为什么不在带case的内部查询中直接使用case??
  • 为什么需要工会?看起来你需要一个内部连接。
  • t1 列在子查询之外不可用。
  • 您要完成的实际任务是什么?这些表是什么?它们是如何联系在一起的?您的样本输入数据和预期输出数据是什么?

标签: sql subquery union conditional-statements


【解决方案1】:

您不能在外部 SELECT 中引用 t1t2

【讨论】:

    【解决方案2】:

    您无法通过工会实现目标。 在联合中,您会在结果中获得 t1 的每一行以及 t2 的每一行。

    如果您需要比较 t1 中的行的值和同时 t2 的值,您必须使用连接将 t1 的行和 t2 的行合并在一起。

    然后你就可以进行比较了。

    如果您详细说明您有什么作为输入和想要作为输出,我们可以为您提供帮助

    【讨论】:

      【解决方案3】:

      如果你坚持按你想要的方式做,那么你不能引用 t1 或 t2,你必须引用别名子查询,你可以通过以下方式来做:

      select t.colA, t.colB,
      case when t.colC = 1 and t.colD is null then 1
      else t.colD end colC
      from 
      (
      select t1.colA,t1.colB,t1.colC, null as colD from table1 t1
      union all
      select t2.colA,t2.colB, null, t2.colC from table2 t2
      ) t
      

      【讨论】:

        猜你喜欢
        • 2015-07-08
        • 2018-12-04
        • 1970-01-01
        • 1970-01-01
        • 2021-04-12
        • 2023-03-17
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多