SQL: копирование данных из 1 таблицы в 3 других - PullRequest
0 голосов
/ 17 марта 2011

Я читал W3 Schools на SQL Insert INTO, которая, насколько я понимаю, создает резервную копию данных в новую таблицу.У меня есть более 300 записей, чтобы добавить.

У меня есть 4 таблицы, одна из которых является источником, из которого я копирую.1) Доступ к карте, который является источником 2) pro_Profile, основное назначение 3) pro_Email, вторичное назначение 4) pro_Address, третье назначение

У меня нет контроля над этой схемой базы данныхa.Это слишком много работы, чтобы перестроить все, чтобы работать с 1 столом, а затем с тремя.Кроме того, данные, которые я добавляю, могут быть дубликатами того, что существует, поэтому мы должны их пропустить.

Доступ к карте имеет следующие поля: CSUID, который сопоставляется с pro_Profile firstName, который сопоставляется с pro_Profile lastName, который сопоставляется с pro_Profile eName, который сопоставляется с адресом электронной почты pro_Profile, который сопоставляется с контактным телефоном pro_Email, который сопоставляется с pro_Address

Как только я скопирую в Pro_Profile, ему нужно будет получить первичный ключ profileID, который является ссылкой на профиль во всех этих таблицах.

Как сначала скопировать все эти данные в pro_Profile, чтобы я мог получить уникальный ключ ID профиля, который является забытым ключом для всех других таблиц?

Вот мой код:

SELECT
    FirstName,
    LastName,
    eName,
    CSUID
INTO

WHERE NOT EXISTS (
 Select
    firstName,
    LastName 
 From
    pro_Profile 
)

Новый запрос, который затрагивает 0 строк

INSERT INTO pro_Profile ("firstName","lastName","userName","departmentID","csuID")
SELECT "First Name","Last Name","eName","Department","CSUID"
FROM "Card Access"
WHERE NOT EXISTS (
 Select
    firstName,
    LastName 
 From
    pro_Profile 
)

1 Ответ

1 голос
/ 17 марта 2011

Формат вашей вставки будет

INSERT INTO table1 ( column1 )
SELECT  col1
FROM    table2

Таким образом, вы выбираете то, что хотите вставить.Вы сможете сделать это как один оператор из всех таблиц, а также можете добавить предложение where.Ознакомьтесь также с ответами на этот вопрос.

ОБНОВЛЕНИЕ: Сначала напишите свой SQL-запрос, чтобы получить строки, которые вы хотите вставить.Таким образом, запрос, который вы имеете выше:

SELECT "First Name","Last Name","eName","Department","CSUID"
FROM "Card Access"
WHERE NOT EXISTS (
 Select
    firstName,
    LastName 
 From
    pro_Profile 
)

при запуске в одиночку, должен вернуть все результаты, которые вы будете вставлять.Что вы получаете, когда просто запускаете это?

ОБНОВЛЕНИЕ: Я думаю, что вы неправильно понимаете, что не существует.Проверьте это .Я думаю, что вам нужно что-то вроде:

SELECT "First Name","Last Name","eName","Department","CSUID"
FROM "Card Access" ca
WHERE (
  Select count(*)
  From pro_Profile 
  WHERE firstName = ca.firstName
    AND LastName = ca.lastName
  ) = 0

ОБНОВЛЕНИЕ: Или в качестве альтернативы вы должны быть в состоянии сделать:

SELECT "First Name","Last Name","eName","Department","CSUID"
FROM "Card Access" ca
WHERE NOT EXISTS (
 Select
    firstName,
    LastName 
 From
    pro_Profile 
 WHERE firstName = ca.firstName
   AND LastName = ca.lastName
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...