2013-11-17 10 views
-1

Мне нужен запрос в mysql, который может преобразовать запись в одну таблицу в различные записи в другой таблице на основе значения поля из первая таблицаЗапрос Mysql для преобразования записи в одной таблице в число записей в другой таблице на основе значений числа fo

у меня есть таблица Table1 с полями, такими как

ID Name Address1 Address2 Address3 Address4 

1 A abc  qwe  wer  rty 
2 T xcv dfgg  kkkl  
3 V fgh 
4 G tyn mfg  uio 
. 
. 

другой таблицы Table2 с fileds как

ID AddressNumber Address 
1 1   abc 
1 2   qwe 
1 3   wer 
1 4   rty 
2 1   xcv 
2 2   dfgg 
2 3   kkk1 
3 1   fgh 
. 
. 

просто его один ко многим бет отношения ween таблицы ie. для одного ID может быть несколько адресов (при макс. 4 не менее 1).

+0

Очень неясно, что вы спросили нг. Просьба уточнить. И что вы пробовали до сих пор? –

+0

Один запрос вряд ли сделает то, что вы хотите. – Lion

+0

Мне нужно написать хранимую процедуру для того же, чтобы ее можно было достичь без использования курсора? –

ответ

0

ОБНОВЛЕНО: Если вы хотите UNPIVOT свою первую таблицу и вставить результат в другую таблицу, вы можете сделать это таким образом

INSERT INTO table2 (id, AddressNumber, Address) 
SELECT id, 
     AddressNumber, 
     CASE AddressNumber 
      WHEN 1 THEN Address1 
      WHEN 2 THEN Address2 
      WHEN 3 THEN Address3 
      WHEN 4 THEN Address4 
     END Address 
    FROM table1 t CROSS JOIN 
(
    SELECT 1 AddressNumber UNION ALL 
    SELECT 2 UNION ALL 
    SELECT 3 UNION ALL 
    SELECT 4 
) i 
HAVING Address IS NOT NULL 
ORDER BY id, AddressNumber; 

Результат в table2:

 
| ID | ADDRESSNUMBER | ADDRESS | 
|----|---------------|---------| 
| 1 |    1 |  abc | 
| 1 |    2 |  qwe | 
| 1 |    3 |  wer | 
| 1 |    4 |  rty | 
| 2 |    1 |  xcv | 
| 2 |    2 | dfgg | 
| 2 |    3 | kkkl | 
| 3 |    1 |  fgh | 
| 4 |    1 |  tyn | 
| 4 |    2 |  mfg | 
| 4 |    3 |  uio | 

Здесь is SQLFiddle demo

+0

Фактически поле id, которое я принял здесь, является лишь примером, у меня есть другое 10-значное целочисленное поле как первичное, и что is random –

+0

'id' в этом вопросе не имеет значения. номера с 1 по 4 представляют номера столбцов «AddressN» в 'table1'. Они просто совпали с порядковыми номерами столбцов адресов. Так что используйте любой идентификатор, который у вас есть. – peterm

+0

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

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