2016-01-30 4 views
2

Я хочу взять с собой произведение скрещивания таблицы, но мне нужны только асимметричные результаты.Перекрестный продукт MySQL, исключая симметричные результаты

Например, предположим, что у меня есть эти предметные коды:

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) 

Может кто-то помочь?

+0

Вы ожидаете результат 3 строк с 3 колонками? –

+0

3 строки по два столбца каждая в каждом столбце с одним кодом курса –

+0

либо (CH10001, CS21003), либо (CS21003, CH10001) в строке –

ответ

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

+0

смог сделать это, выполнив следующий запрос, используя ваше значение меньше Idea «выберите l.courseCode, r.courseCode от subject as l, subject as r where l.courseCode

Смежные вопросы