我在不同type_id的同一表t(type_id,place_name)上执行联接:
------------------
type_id|place_name
-------|----------
1 | A
1 | B
2 | X
2 | Y
------------------
我的查询是:
select t1.type_id, t1.place_name
from t as t1
join t as t2
on
t1.type_id!= t2.type_id AND
t1.place_name!=t2.place_name;
我得到结果:
-------------------
type_id|place_name
-------|-----------
2 | X
2 | Y
2 | X
2 | Y
1 | A
1 | B
1 | A
1 | B
-------------------
但我想要这样的结果:
-------------------
type_id|place_name
-------|-----------
1 | A
2 | X
1 | A
2 | Y
1 | B
2 | X
1 | B
2 | Y
-------------------
我需要使用order by对结果进行排序。请帮忙。
最佳答案
如果您想要某种压缩订单,则可能是这样的:
select t1.type_id, t1.place_name
from t as t1
join t as t2
on
t1.type_id!= t2.type_id AND
t1.place_name!=t2.place_name
order by
least(t1.place_name, t2.place_name),
greatest(t1.place_name, t2.place_name),
t1.type_id
SQLFiddle
由于您无法确切解释订单的逻辑,因此我无法告诉您该订单是否对其他数据有效。您可能需要使用两列的组合来代替
place_name
。