MySQL交叉产品,不包括对称结果

时间:2016-01-30 05:41:35

标签: mysql join

我想把表格的十字架产品与自身结合起来,但我只想要不对称的结果。

例如,假设我有这些主题代码:

CH10001
CS21003
MA10001

有条件的交叉产品"不等于"将导致6行:

CH10001,CS21003
CH10001,MA10001
CS21003,MA10001
CS21003,CH10001
MA10001,CH10001
MA10001,CS21003

但我想在输出中只有3行。那就是:

(CH10001,CS21003) OR (CS21003,CH10001)
(CH10001,MA10001) OR (MA10001,CH10001)
(CS21003,MA10001) OR (MA10001,CS21003)

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

这应该这样做

SELECT DISTINCT 
    case when a.courseID <= b.courseID 
      then a.courseID 
      else b.courseID 
     end id1,
    case when a.courseID <= b.courseID 
      then b.courseID 
      else a.courseID 
    end id2
  from course A cross join course B
HAVING id1 <> id2

返回第一个结果

[CH10001    CS21003]
[CH10001    MA10001]
[CS21003    MA10001]

Here's the SQL Fiddle