T-SQL:表中的逻辑唯一表行

时间:2013-04-25 07:56:10

标签: sql sql-server tsql select unique

我有一个简单的表,其中包含有关元素之间双向链接的信息。表看起来像这样:

link_id | link_side_a_element_id | link_side_b_element_id
---------------------------------------------------------
      1 |                    100 |                    200
      2 |                    200 |                    100
      3 |                    300 |                    400
      4 |                    400 |                    300

我想要的只是选择元素之间的唯一链接,无论哪个元素是sideA或sideB。例如,100到200之间的链接是200到100之间的链接,并且查询只返回一条记录,如:

link_side_a_element_id | link_side_b_element_id
-----------------------------------------------
                   100 |                    200
                   300 |                    400

这对我来说已经足够了。但坚持写正确选择DML ...现在我用Java做,用适当的hashCode()和equals()方法获取所有数据。这对我来说现在很有用,但是想在SQL Management Studio中正确获取数据......如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

只需选择要显示两个项目的订单(例如,始终列出最低/最早的第一个),然后在其上运行DISTINCT

SELECT DISTINCT
   CASE WHEN link_side_a_element_id < link_side_b_element_id THEN link_side_a_element_id
        ELSE link_side_b_element_id END as a,
   CASE WHEN link_side_a_element_id < link_side_b_element_id THEN link_side_b_element_id
        ELSE link_side_a_element_id END as b
FROM
    table