合并行以及在同一查询中获取其他数据

时间:2012-09-24 13:12:02

标签: mysql database database-design

好的,对不起,如果我之前不清楚

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

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,这将根据类型决定 - 无论哪一行的类型值较小。

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

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

2 个答案:

答案 0 :(得分:1)

看起来与How to get all the distinct combinations 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)

答案 1 :(得分: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