考虑以下SQL表:
id | col1 | col2
----------------
1 | a | b
2 | c | d
什么查询可以获得a,b,c,d
的独特结果集?我知道我能做到:
SELECT distinct col1 FROM `table` UNION
SELECT distinct col2 FROM `table`
但这看起来很丑陋(并没有让我得到整个不同的集合);另外,我不确定如何使用该结果集进行进一步处理。还有更好的主意吗?
答案 0 :(得分:2)
也许不是更好,但不同:
select distinct sub.val from (
select col1 as val from table
union all
select col2 as val from table
) as sub
答案 1 :(得分:2)
美丽是旁观者的眼睛。 UNION
是Codd关系代数的one of the five primitive operators,对我而言,它是一种美丽的东西。
您的SQL代码确实应该为您提供完整的结果集;实际上,您应该能够省略DISTINCT
关键字,代码仍然可以获得整个不同的结果集(提示:集合不包含重复的成员)。
答案 2 :(得分:0)
您可以使用LAG和LEAD函数在单个结果集中获取上一行和下一行的值。看看这篇文章:
http://explainextended.com/2009/03/10/analytic-functions-first_value-last_value-lead-lag/