简化SQL选择(att1,att2)联合(att2,att1)以避免复制和粘贴

时间:2017-11-01 00:17:28

标签: sql sqlite

我尝试简化以下代码,但除了复制和粘贴之外,我似乎无法获得正确的语法,这使代码难以阅读。有人可以指出我正确的方向。

select att1, att2 from LONG EXPRESSION 
union
select att2, att1 from LONG EXPRESSION

我希望这样做

select att1, att2 union select att2, att1
from LONG EXPRESSION

或类似

select att1, att2 from LONG EXPRESSION X
union
select att2, att1 from X

非常感谢

2 个答案:

答案 0 :(得分:2)

您正在寻找一个常见的表格表达式,即CTE:

with t as (
    select att1, att2
    from LONG EXPRESSION 
   )
select t.att1, t.att2
from t
union all
select t.att2, t.att1
from t;

请注意,我使用的是union all而不是union。这是优选的 - 除非你故意想要产生消除重复的开销。

答案 1 :(得分:1)

在我的手机上,请原谅格式化:)

SELECT (CASE multiplier.ID WHEN 0 THEN src.att1 ELSE src.att2 END), 
       (CASE multiplier.ID WHEN 1 THEN src.att1 ELSE src.att2 END)
FROM LONG_EXPRESSION src CROSS JOIN
     (SELECT 0 AS ID
      UNION ALL
      SELECT 1 AS ID
     ) multiplier