[英]SQL server: populating a column based on other table values
我有两个表:TableA
ID AID BID Status
1 100 1000
2 101 1001
3 102 1000
等等...
表B
AID BID
100 1000
101 1008
107 1001
现在,我要填充tableA,状态为'FAIL',如果:1.对于tableA中的AID,其对应的BID应该等于tableB的相同值。2.如果tableB中对应的BID不相同,请确保它在tableB中不存在表示BID是TableB中不存在的新值
例如:TableA,AID = 100 BID =1000。现在应将此AID = 100放入tableB; 在表B中获得AID 100; BID = 1000,因此它不会失败。
因此,对于AID 100,BID应该为1000(来自tableB)或TableB.BID中不存在的任何其他新值,而与AID无关。
A.AID = 101 BID = 1001,但是B.AID = 107存在此BID值,因此失败。 预期结果:
ID AID BID Status
1 100 1000 NULL
2 101 1001 FAIL
3 102 1000 FAIL
谢谢
看着其他东西时,偶然发现了这个悬而未决的问题。 这两个查询以相同的顺序似乎是一个简单的答案:
update TableA
set Status = 'F'
update TableA T
Set Status = 'N'
where T.ID in (Select A.ID from TableA A, TableB B
where A.AID = B.AID and A.BID = B.BID)
Update TableA
Set Status = Case
When Exists (
Select 1
From TableB
Where TableB.AID = TableA.AID
And TableB.BID = TableA.BID
) Then Null
When Not Exists (
Select 1
From TableB
Where TableB.BID = TableA.BID
) Then Null
Else 'FAIL'
End
我使用bigint作为数据类型,因为我根本不知道那里有什么类型的国王...
无论如何,这应该有所帮助:
DECLARE @ID bigint, @BID bigint
DECLARE CURSOR_CHECK CURSOR FOR
SELECT ID, BID FROM tableA
OPEN CURSOR_CHECK
FETCH NEXT FROM CURSOR_CHECK INTO @ID, @BID
BEGIN TRANSACTION
WHILE @@FETCH_STATUS == 0
BEGIN
IF ((SELECT COUNT(*) FROM tableB WHERE BID = @BID) > 1)
UPDATE tableA SET status = 'FAIL' WHERE id = @ID
FETCH NEXT FROM CURSOR_CHECK INTO @ID, @BID
END
COMMIT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.