Импорт данных из двух таблиц SQL + PK / FK - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу вставить данные из двух разных таблиц в эту:

DROP TABLE IF EXISTS Customer CASCADE;
CREATE TABLE Customer (
CustomerID INTEGER,
CompanyName VARCHAR(255),
ContactName VARCHAR(255),
ContactTitle VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
Region VARCHAR(255),
PostalCode VARCHAR(255),
Country VARCHAR(255),
PRIMARY KEY (CustomerID),
FOREIGN KEY (CustomerID) REFERENCES Person(PhoneID)
);

CustomerID is PK / FK из PhoneID и PhoneID находится в таблице Person .
Другие значения находятся в таблице CustomerOrders .

Поэтому я хочу вставить PhoneID в CustomerID, а остальные данные CustomerOrders - в другие переменные.

Я предложил это:

  INSERT INTO customer (
     customerid,
     companyname,
     contactname,
     contacttitle,
     address,
     city,
     region,
     postalcode,
     country
)
     SELECT phoneid,
            companyname,
            contactname,
            contacttitle,
            address,
            city,
            region,
            postalcode,
            country
     FROM person,
          customerorders;

Но когда я компилирую, он говорит:

[2018-12-17 18:03:26] [23505] ОШИБКА: дубликат ключанарушает ограничение уникальности «customer_pkey»

[2018-12-17 18:03:26] Подробности: ключ уже существует (customerid) = (1).


Если я еще не закончил объяснение, я оставляю модель:

model

1 Ответ

0 голосов
/ 17 декабря 2018

Ваш запрос вставки должен иметь хотя бы одно соединение между обеими таблицами, пока вы не захотите сделать его пересеченным.В любом случае, вы получаете проблему из-за того, что уже вставлен идентификатор клиента.

    INSERT INTO Customer(CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country) 
    SELECT PhoneID, CompanyName, ContactName, ContactTitle, Address, City, Region , PostalCode, Country
    FROM Person p 
    JOIN CustomerOrders c
    ON p.PhoneID = c.CustomerID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...