我在表超链接中有两列,源和目标,用于存储超链接的源和目标。

source | destination
--------------------
  a    |  b
  b    |  c
  c    |  d
  c    |  b

有两个超链接同时涉及B和C。这两个超链接之间的区别在于超链接的方向。然而,我的目标是检索唯一的超链接,不管是哪个方向。所以对于超链接,如从B到C和从C到B,我只想选择其中一个。任何人都愿意。
所以我的结果应该是这样的:
source | destination
--------------------
  a    |  b
  b    |  c
  c    |  d

到目前为止,我可以在Java中实现这一点,并在使用JDBC执行SQL语句之前进行一些处理。然而,当桌子变得很大时,这将是非常乏味的。
我想知道是否无论如何我都可以在SQL中这样做。
我尝试过SELECT DISTINCT source,destination FROM Hyperlink但是它返回了我独特的排列。我需要独特的组合。
谢谢!

最佳答案

使用least()和greatest()操作符很容易实现这一点,但是由于mysql不支持它们,因此需要使用case构造来获得较小/较大的值。对于两列,这是可以的,但是一旦涉及到更多的列,这个解决方案就会变得相当混乱。

select distinct
          case
            when source < destination then source
            else destination
          end as source,
          case
            when source > destination then source
            else destination
          end as destination
from hyperlinks

关于mysql - 从两列中选择不同的组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11707758/

10-13 00:59