2014-01-29 4 views
0

У меня есть две таблицы:присоединиться две таблицы, ввод и порядок двумя различными колонки

bsl_prioritas_perasat     rek_perasat 
+=========+========+=====+   +=======+==========+======+ 
|RUPER |CODE |SORT |   |CODE |NAME  |SUB | 
+=========+========+=====+   +=======+==========+======+ 
|CB2RA |R0004 |1 |   |R0004 |JASA 1 |AKA | 
|CB2RA |R0006 |2 |   |R0006 |JASA 2 |AKB | 
|CB3RI |R0006 |1 |   |R0008 |JASA VK |VK | 
|CB3RI |R0008 |2 |   |R0026 |ACCOMT |AKOM | 
+=========+========+=====+   +=======+==========+======+ 

вход будет RUPER и SUB.

Если RUPER существует на bsl_prioritas_perasat, то он будет заказывать по СНП и ИМЯ, и если CODE не существует/NULL для этого RUPER на bsl_prioritas_perasat, это поставит на последний

Если RUPER не существует, он будет игнорировать СНП и это будет заказ по NAME

пример:

1st     2nd     3rd 
RUPER=CB2RA, SUB=AK RUPER=CB3RI, SUB=AK RUPER=CB5DB, SUB=AK 
Result:    Result:    Result: 
+==========+   +==========+   +==========+ 
|NAME  |   |NAME  |   |NAME  | 
+==========+   +==========+   +==========+ 
|JASA 1 |   |JASA 2 |   |ACCOMT | 
|JASA 2 |   |ACCOMT |   |JASA 1 | 
|ACCOMT |   |JASA 1 |   |JASA 2 | 
+==========+   +==========+   +==========+ 

Как я могу получить этот результат?

+0

Похоже, вы хотите, чтобы точное совпадение на RUPER и соответствие префикса на SUB? – jkinkead

+0

@jkinkead да, вот что мне нужно. Вы можете мне помочь? – Darjeeling

ответ

0

Вы должны быть в состоянии использовать LEFT JOIN с IFNULL и значением сортировки по умолчанию, что-то вроде:

SELECT name, sort 
FROM (SELECT r.NAME, IFNULL(b.SORT, 100), 
    FROM rek_perasat AS r LEFT JOIN bsl_prioritas_perasat AS b 
    ON r.CODE = b.CODE AND b.RUPER = ? 
    WHERE r.SUB LIKE ? + '%'); 

Обновление: Добавлено подвыборкой.

+0

Мне нужен заказ от SORT, но когда я попытался добавить 'order by SORT', я не могу получить null на последнем? Я попробовал с 'order by SORT is null ', но заказ desc? – Darjeeling

+0

Как насчет подзапроса для этого - 'SELECT name, sort FROM (SELECT r.name AS name, IFNULL (b.SORT, 100) AS sort FROM ...'? – jkinkead

+0

Спасибо, это работает. Вы можете отредактировать и добавить, что в вашем ответе, и я приму это. :) – Darjeeling

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