2016-05-05 3 views
0

Я работаю с дублирующим несколько записей в таблице 1 с первичным ключом, который имеет ссылку с таблицы 2 (внешний ключ)Дублирование несколько записей в таблице с первичным ключом

Рассмотрим таблицу employee с колоннами (Ид (первичный ключ) , ENAME, отдел, dept_code).

Таблица 2 employee_address с колоннами (экономической помощи (первичный ключ), Ид (иностранный ключ), город, страна)

Теперь задача является таблица 1 (то есть. Работник) может иметь несколько значений, с другой отдел коды.

Предположим, что dept_code может быть 1 или 2, как и так.

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

СОТРУДНИК стол

Eid(pk) ename dept Dept_code  
100  Sss Cse  1  
101  Aaa Cse  1  
102  Bbb Cse  1  
103  Ccc Eee  2  
104  ddd it  3 

СОТРУДНИК АДРЕС таблица

Eaid (pk) Eid (fk) city country 
1   100   NY  Us 
2   100   NY  Us 
3   100   NY  Us 
4   101   CALIF Us 
5   102   DC  Us 
6   102   DC  Us 
7   103   NJ  Us 

теперь вещь я должен дублировать все записи в таблице employee, где dept_code = 1 и дубликаты записей dept_co de должно быть = 5.

И внешний ключ, ссылающийся на таблицу адресов сотрудников (т.е. здесь в текущем документе 100,101,102) в таблице 2 должен быть повторен несколько раз те значение ключа присутствует иностранный в таблице 2.

Я должен получить выход, как этот

таблицы Employee

Eid(pk) ename dept Dept_code  
100  Sss Cse  1  
101  Aaa Cse  1  
102  Bbb Cse  1  
103  Ccc Eee  2  
104  ddd it  3  
**105 sss cse  5  
106  aaa cse  5  
107  bbb cse  5** 

Сотрудник Адрес таблицы

Eaid (pk) Eid (fk) city country 
1   100  NY  Us 
2   100  NY  Us 
3   100  NY  Us 
4   101  CALIF  Us 
5   102  DC  Us 
6   102  DC  Us 
7   103  NJ  Us 
**8    105  NY  Us 
9   105  NY  Us 
10   105  Ny  Us 
11   106  CALIF  Us 
12   107  DC  Us 
13   107  DC  Us** 

Теперь у меня есть, чтобы получить выход, как это.

Условия для этой задачи,

  • нет для цикла
  • удара базу данных должна быть минимально возможной
  • может использовать Java или если posssible в самом SQL запросе.

Я пробовал с различными идеями ничего не выработал.

Помогите мне в этом.

+2

Как это связано с java? –

+0

'Я пытался с различными идеями ничего не выработал', пожалуйста, покажите или объясните, что вы пробовали. – Lexi

+0

Я бы начал с выбора и подзапроса. Единственная сложная часть - использовать правильный первичный ключ. Как: 'выбрать (выбрать макс (Ид) + 1 от работника), Ename, DEPT, 5 в сотрудника из (выберите * от сотрудника, где dept_code = 1)' –

ответ

0

Если я понимаю ваш вопрос, эти два запроса будут работать. Они используют функции окна tSql, если вы не используете Sql Server, тогда вам нужно будет найти эквивалент.

Edited ответить комментарий от

ФП

Если вы хотите создать новые таблицы:

Select * Into EmployeeNew From (
    Select * 
     From Employee E 
    Union All 
    Select Row_Number() Over (Order By eid) + (Select Max(eid) From Employee), 
      ename, dept, 5 dept_code 
     From Employee 
     Where Dept_Code = 1) A 

Select * Into EmployeeAddressNew From (
    Select A.* 
     From Employee E 
     Join EmployeeAddress A On A.eid = E.eid 
    Union All 
    Select A.eaid + (Select Max(eaid) From EmployeeAddress), 
      Dense_Rank() Over (Order By E.eid) + (Select Max(eid) From Employee), 
      City, Country 
     From Employee E 
     Join EmployeeAddress A On A.eid = E.eid 
     Where E.Dept_Code = 1) A 

Если вы хотите вставить «новые» записи в исходные таблицы:

Insert Employee 
    Select Row_Number() Over (Order By eid) + (Select Max(eid) From Employee), 
      ename, dept, 5 dept_code 
     From Employee 
     Where Dept_Code = 1 

Insert EmployeeAddress  
    Select A.eaid + (Select Max(eaid) From EmployeeAddress), 
      Dense_Rank() Over (Order By E.eid) + (Select Max(eid) From Employee), 
      City, Country 
     From Employee E 
     Join EmployeeAddress A On A.eid = E.eid 
     Where E.Dept_Code = 1 
+0

Спасибо !. Работает. И вот еще. Я хотел бы вставить эту базу данных. Вы просто выбираете вещи и показываете. –

+0

Привет, это мой второй вопрос. –

+0

выберите A. * из t017_fournisseur_inconnu T Регистрация t0171_fournisseur_inconnu_lig А на A.cap_rnpo_id = T.cap_rnpo_id Союза Все выбрать A.cap_rnpo_lig_id + (выбрать макс (cap_rnpo_lig_id) из t0171_fournisseur_inconnu_lig), DENSE_RANK() над (приказ Т. cap_rnpo_id) + (выбрать макс (cap_rnpo_id) от t017_fournisseur_inconnu), cd_site, prorata, Compte, Libelle, Виль, платит, codepays, client_scopp, cli_fin, куб.см, габаритная, PA, CA, решение, Оригине, DateUpdate, IPN из t017_fournisseur_inconnu T Присоединиться к t0171_fournisseur_inconnu_lig A на A.cap_rnpo_id = T.cap_rnpo_id где T.scenario_id = 1; –