我有一个简单的表,其中包含有关元素之间双向链接的信息。表看起来像这样:
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中正确获取数据......如何实现这一目标?
答案 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