在SQL中加入列

时间:2011-05-11 14:11:20

标签: mysql sql

考虑以下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`

但这看起来很丑陋(并没有让我得到整个不同的集合);另外,我不确定如何使用该结果集进行进一步处理。还有更好的主意吗?

3 个答案:

答案 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/