我有3个表mainCategory,subCategory和products.i想要更新主类别,但是当它应该更新其他剩余表中的受尊重数据时。在我的表格之后。
1. mainCategory
mainCatId
mainCatName
2. subCategory
subCatId
mainCatId
mainCatName
subCatName
3. products
productId
subCatId
subCatName
productName
更新必须像,当我更改mainCatName时,它会自动更改mainCatId,所以它应该在其他表中更改mainCaId和mainCatName,subCatId和subCatName,我已经尝试过查询但是它不能正常工作 查询是:
UPDATE mainCategory
SET mainCatId =, mainCatName =
FROM mainCategory
INNER JOIN
subCategory ON mainCategory.mainCatId = subCategory.mainCatId
CROSS JOIN
products
,请帮助我!
答案 0 :(得分:1)
您需要将表与外键链接,并在表定义中应用ON UPDATE CASCADE。
您不需要在subCategory表中包含mainCatName
,因为subCategory表应该与具有mainCategory表的外键链接。
与products表中的subCatgoryName相同。
CREATE TABLE mainCategory (
[mainCatId] INT NOT NULL,
[mainCatName] NCHAR (10) NULL,
PRIMARY KEY CLUSTERED ([mainCatId] ASC));
CREATE TABLE subCategory (
[subCatId] INT NOT NULL,
[mainCatId] INT NULL,
[subCatName] NCHAR (10) NULL,
PRIMARY KEY CLUSTERED ([subCatId] ASC),
CONSTRAINT [FK_Table_ToTableMainCat] FOREIGN KEY ([mainCatId])
REFERENCES [mainCategory] ([mainCatId]) ON UPDATE CASCADE);
CREATE TABLE products (
[productId] INT NOT NULL PRIMARY KEY,
[subCatId] INT NULL,
[productName] NCHAR(10) NULL,
CONSTRAINT [FK_products_ToTableSubCategory] FOREIGN KEY (subCatId)
REFERENCES subCategory(subCatId) ON UPDATE CASCADE);
您可以简单地通过以下方式更新mainCatName:
UPDATE mainCategory SET mainCatName='NEW NAME' WHERE mainCatId=SOMEID;
您的subCategory表通过FOREIGN KEY与mainCategory表链接。 您的产品表与带有FOREIGN KEY的子类别表链接。
如果您想获得特定 mainCategory 的产品:
SELECT productName, subCatName, mainCatName FROM products
JOIN subCategory ON products.subCatID = subCategory.subCatID
JOIN mainCategory ON subCategory.mainCatID = mainCategory.mainCatID
where mainCategory.mainCatID = 1;
如果您想获得特定子类别的产品:
SELECT productName, subCatName FROM products
JOIN subCategory ON products.subCatID = subCategory.subCatID
where subCategory.subCatID = 1;
如果要删除特定子类别中的产品,只需删除子类别记录,相应的产品将在级联中删除。
如果要更改subCategory的名称,只需更改subCategory表中的记录即可。