我有下表:
SubjectID AttributeID ValueID
1 1 2
1 1 3
1 2 1
2 1 3
2 2 1
1 3 1
一个属性可以有多个值(同一属性在上表中多次出现)。 对于同一属性(不同值)出现多少次没有限制。
我不想使用 SubjectID=1 更新主题,将 ValueID 更改为只有 1,而 AttributeID 为 1,所以
之前:
Select * from Subject WHERE SubjectID=1 AND AttributeID=1
--returns:
SubjectID AttributeID ValueID
1 1 2
1 1 3
之后:
Select * from Subject WHERE SubjectID=1 AND AttributeID=1
--returns:
SubjectID AttributeID ValueID
1 1 1
我正在使用带有可选参数的存储过程(全部为 null 并仅更新提供的属性)执行此操作,现在这不是问题。我的问题是:
更新此行的最佳做法是什么?我认为以下答案是可行的:
- 删除所有包含指定属性的行,然后插入新的;
- 如果只有一个该类型的属性(对于指定的主题)更新那个(如果同一属性有超过 1 个则不是一个好的解决方案)
还有其他想法吗?
最佳答案
您可以只更新一行,然后像这样删除其他行:
set rowcount 1;
update Subject
set ValuedID = 1
where SubjectID = 1
and AttributeID = 1;
set rowcount 0;
delete Subject
where SubjectID = 1
and AttributeID = 1
and ValuedID <> 1;
关于sql-server - 更新 EAV 表行的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43153661/