首页 > 解决方案 > 从两个表导入数据 SQL + PK/FK

问题描述

我想将来自两个不同表的数据插入到这个表中:

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)
);

CustomerIDPhoneIDPK/FKPhoneIDPerson表中。 其他值在表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)。


如果我没有在这里很好地解释完,我会离开模型:

模型

标签: sqldatabasepostgresql

解决方案


您的插入查询应该在两个表之间至少有一个连接,直到您不想让它交叉。无论如何,由于 Inserting customerID 已经存在,您会遇到问题。

    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;

推荐阅读