好的,对不起,如果我之前不清楚
以下是我数据库中的一个表
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,这将根据类型决定 - 无论哪一行的类型值较小。
自从过去两个小时以来,我一直在尝试加入,但在一个查询中却无法完成。
我可以使用内部查询,但是,我想探索或可能的解决方案,然后只有最后的手段将使用内部查询。
答案 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