2015-07-29 3 views
1

допустят у меня есть следующие данные в таблицу:декартовых присоединиться MySQL запросов

'1','nid' 
'1','step.nid' 
'2','step.nid' 
'3','step.nid' 

, что означает, что каждый нидь может иметь несколько шагов, в этом случае для НИЗА = 1 мы имеем 3 шага.

Как я могу написать запрос, чтобы извлечь следующий результат:

'1','nid' 
'1','step.nid' 
'1','nid' 
'2','step.nid' 
'1','nid' 
'3','step.nid' 

поэтому мне нужно комбинированые NiD каждому шагу

+0

Для строк 3 и 5 вы имеете в виду ''2', 'nid'' и'' 3 ',' nid'' соответственно? Если нет, можете ли вы уточнить, чего вы пытаетесь достичь? –

+0

нет, поэтому идея для каждого шага должна иметь 3-кратное совпадение, так как я показываю в примере один и тот же «1», «нид» для каждого шага –

+0

У вас есть еще один столбец, который явно сортирует их? Хакерно будет их сортировать так, как вы их перечисляете здесь. –

ответ

0

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

select * 
from tbl t1 
join tbl t2 on t1.str regexp t2.str and t1.id <> t2.id 
; 
0

Try:

select case o.type when 'nid' then n.column1 else s.column1 end output1, 
     case o.type when 'nid' then n.column2 else s.column2 end output2 
from yourTable n 
cross join yourTable s 
cross join (select 'nid' type union all select 'step') o 
where n.column2='nid' and s.column2='step.nid' 
order by n.column1, s.column1, o.type 

SQLFiddle here.

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