我正在尝试根据以下信息创建查询。尝试创建它时,我一直违反主键。
CREATE TABLE writers
(authorid VARCHAR2(4),
lname VARCHAR2(10),
fname VARCHAR2(10),
isbn VARCHAR2(10),
title VARCHAR2(30) CONSTRAINT title_nn NOT NULL,
CONSTRAINT wt_pk PRIMARY KEY (authorid),
CONSTRAINT wt_fk FOREIGN KEY (isbn) REFERENCES books (isbn));
INSERT INTO writers
(SELECT authorid, fname, lname, isbn, title
FROM author
JOIN bookauthor USING (authorid)
JOIN books USING (isbn));
ALTER TABLE employees
ADD CONSTRAINT et_pk
PRIMARY KEY (ssn);
答案 0 :(得分:1)
您尝试解决的最重要信息是:请勿复制这些表中的数据。
在数据库架构中,您拥有表bookauthor
,该表表示book
和author
表之间的多对多关系。每个作者可以写多本书,在这种情况下,用于填充 writers
表的语句对于同一authorid返回多行。这将导致您在批量插入过程中违反主键。
您可以通过稍微更改查询以找到authorid
并在结果中包含多行来进行检查
SELECT authorid, count(1)
FROM author
JOIN bookauthor USING (authorid)
JOIN books USING (isbn)
GROUP BY authorid
HAVING COUNT(1) > 1;
将主键设置为writers
的 authorid
表不是很有用,因此,在本练习中您不应该尝试填充它。