sql - 从两个表导入数据 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)
);
CustomerID是PhoneID的PK/FK,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)。
如果我没有在这里很好地解释完,我会离开模型:
解决方案
您的插入查询应该在两个表之间至少有一个连接,直到您不想让它交叉。无论如何,由于 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;
推荐阅读
- r - 如何在我的数据框上正确实现 read.zoo 功能
- python-3.x - 元类哈希、__eq__ 和 isinstance
- xcode - Firebase Crashlytics:缺少 dsym 文件
- google-api - 如何使用服务帐户访问 Google Doc Api?
- odata - Odata 共享点休息 api 过滤器
- javascript - 如果用户已经存在于数据库中,我想通过 php get 方法发送错误消息,然后在没有 GET 变量的情况下重置 url
- python - 这些方法在models.py中基本上是做什么的
- ios - 错误:在此上下文中,“事务”对于类型查找不明确
- python - 如何在 Python 中将表达式字符串拆分为列表?
- python - Loc Pandas DataFrames 上的日期范围