SQL Server 当只有两个表的计数和总和的差异大于0时插入行

qvk1mo1f  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(141)

假设有两个表A和B

A
productId, owner
1000, null
1000, null
1000, null
1000, 'john'

B
productId, owner, reserved
1000, 'tom', 1

我正在寻找一种方法,如何插入行到B只有当有足够的行保留它。
例如,当前只有2个产品可用于productId=1000,因为有3个空所有者,1个在B表中保留。此时,如果用户尝试保留3个(插入值1000、'bill'、3),则应该失败。

vuktfyat

vuktfyat1#

计算有多少可用数据,如果大于0,则允许插入?我认为您将问题过于简单化了,您没有提到数据是如何到达插入的,也没有提到如果插入失败应该发生什么。

declare @productId int = 1000, @owner varchar(128) = 'bill', @reserved int = 3;

insert into B (productId, [owner], reserved)
select @productId, @owner, @reserved
where (select count(*) from A where productId = @productId and [owner] is null)
- (select sum(reserved) from B where productId = @productId) > 0;

相关问题