0

好的,抱歉,如果我之前不清楚

以下是我的数据库中的表之一

col1 col2  type  
  1     2    3  
  2     1    4  
  1     3    0   
  1     4    0

现在我加入自己,我正试图得到这样的结果

  1 - 2 - 3 
  1 - 3 - 0 
  1 - 4 - 0 

但不能。

如果在表中是否有任何数据恰好是这样的

Col1    Col2 
 1   -  2  
 2   -  1

然后结果应该只包含一行 1-2 或 2-1,这将根据类型决定 - 以具有较小类型值的行为准。

自从过去两个小时以来,我一直在尝试加入,但不能完全在一个查询中完成。

我可以使用内部查询,但是,我想探索或可能的解决方案,然后只有在最后才使用内部查询。

4

2 回答 2

1

看起来非常类似于 How to get all the distinct combination of 2 columns in MySQL

我的解决方案是:

select t1.col1, t1.col2, t1.type
from table t1 join table 
           t2 on t1.col1 = t2.col2 and t1.col2 = t2.col1 and t1.col1 < t2.col1

union

select t1.col1, t1.col2, t1.type
from table t1
where not exists (select 1 from table where col1 = t1.col2 and col2 = t1.col1)
于 2012-09-24T13:17:02.387 回答
0

如果我理解正确,您正在寻找的内容根本不需要加入。无论顺序如何,您都需要 col1 和 col2 中的不同对以及类型。这是一个聚合,以及其他一些操作:

select mincol, maxcol, type
from (select (case when col1 < col2 then col1 else col2 end) as mincol,
             (case when col1 < col2 then col1 else col2 end) as maxcol,
             type
      from t
     )
group by mincol, maxcol, type
order by 1, 2, 3

基于最小类型约束,您似乎想要的是对此的一个小变化:

select mincol, maxcol, min(type) as type
from (select (case when col1 < col2 then col1 else col2 end) as mincol,
             (case when col1 < col2 then col1 else col2 end) as maxcol,
             type
      from t
     )
group by mincol, maxcol
order by 1, 2
于 2012-09-24T13:18:54.567 回答