我在不同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

08-26 11:26