SQL声明:更新问题

SQL Statement : Update issue

我有这三个 tables :

RESEARCHER(Re_Id, Re_Name, Re_Address, Re_Phone, Re_HomePhoneNumber,
Re_OfficeNumber, Re_FirstScore, Re_Second_Score)

PUBLICATION(Pub_ID, Pub_Title, Pub_Type, Pub_Publisher, Pub_Year,Pub_Country, Pub_StartingPage, Pub_Number_of_Page, Score1, Score2)

WRITTEN_BY(Re_Id, Pub_ID)

我想将出版物“数据库系统简介”的作者更改为“Henry Gordon”“莎拉·帕克”

问题出在WRITTEN_BYtable,我只存储了研究员的ID出版物的ID

我的想法是将 WRITTEN_BY 中的 Re_Id 更改为“Henry Gorgon" , "Sarah Parker" , 已经存在于 RESEARCHER table

UPDATE WRITTEN_BY
SET Re_Id = ....( SELECT Re_Id
                  FROM RESEACHER
                  WHERE Re_Name = ‘Henry Gordon’ OR Re_Name = ‘Sarah Paker’ )
WHERE Pub_ID IN ( SELECT Pub_ID
                   FROM PUBLICATION
                   WHERE Pub_Name = ‘Introduciton to Database system’ );

我在 SET 部分有问题,那么如何为该要求编写 SQL 语句? 这是我的模式的 sqlfiddle link:http://sqlfiddle.com/#!9/b9118/1

我会使用类似下面的查询:

DELETE FROM WRITTEN_BY WHERE Pub_ID IN (
SELECT Pub_ID FROM PUBLICATION
                   WHERE Pub_Title = 'Introduciton to Database system' )

INSERT INTO WRITTEN_BY 
SELECT Re_Id,Pub_Id
FROM RESEARCHER CROSS JOIN PUBLICATION 
WHERE Re_Name = 'Henry Gordon' OR Re_Name = 'Sarah Paker' 
AND Pub_Title like 'Introduciton to Database system'

SELECT * FROM WRITTEN_BY

我们的想法是先删除现有的映射——你不应该更新它——然后插入一个新的映射。

在映射 table 的情况下,delete/insert 方法与更新的原因有利于 delete/insert,因为大多数映射 table 包含多对多映射,并且通常是一对多映射。

最初我们可能有一本书映射到 n 位作者,其中 n <>1 然后我们要么添加额外的行,要么留下无关的行。

查看示例 fiddle:http://sqlfiddle.com/#!6/a0e72/13

然而,真正的交易是 CROSS JOIN。这不像其他 JOIN 那样采用任何 ON,用于生成笛卡尔积类型映射。 我们通过添加 suitable WHERE 子句

将其限制为仅根据需要获取有限数量的行