我正在尝试找到一种方法,能够更新任何新单位产品的单位代码,但保留已创建的单位产品的原始单位代码。
即,如果单元代码在提供的主题之间发生变化,我希望单元代码能够反映创建单元课程时的准确代码。
这是我的表格
CREATE TABLE Units ( UnitsID INT(10) AUTO_INCREMENT, UnitsName VARCHAR(255) NOT NULL, UnitsCode VARCHAR(20) NOT NULL UNIQUE, PRIMARY KEY (UnitsID) ); CREATE TABLE UnitsOffering ( UOfferingID INT(10) AUTO_INCREMENT, UOUnits INT(10) NOT NULL, YIIntake VARCHAR(255) NOT NULL, YIYear INT(4) NOT NULL, PRIMARY KEY (UOfferingID), FOREIGN KEY (UOUnits) REFERENCES Units(UnitsID) );
我可以使用当前的存储过程对其进行更新,但是当我列出单位产品和单位详细信息时,它反映的是新的单位代码,而不是创建产品时数据库中的代码。
CREATE PROCEDURE UpdateUnit(IN vUnitsID VARCHAR (255), IN vUnitsCode VARCHAR (20)) BEGIN UPDATE Units SET UnitsCode = vUnitsCode WHERE UnitsID = vUnitsID; END;
这是我在创建列表时使用的选择语句。
SELECT O.UOfferingID, U.UnitsCode, U.UnitsName, O.YIIntake, O.YIYear FROM (UnitsOffering O INNER JOIN Units U ON O.UOUnits = U.UnitsID) ORDER BY O.UOfferingID;
我不确定这是否真的可以做到。如果可以的话,我不确定我的表设置方式、更新语句或列表语句是否有问题。
任何帮助将不胜感激。我尝试查看一些文档来了解如何做到这一点,但找不到正确的关键字。
下面是我希望能够列出的示例。对于此示例,如果 2021 年结束后单元代码发生更改,我希望它显示的内容。
COS10000 - Introduction to Programming - Semester 2 2021 INF30011 - Database Implementation - Semester 1 2022 COS10059 - Introduction to Programming - Semester 2 2022
有两种可能的方法: