[英]SQL server: populating a column based on other table values
I have two tables: TableA 我有两个表:TableA
ID AID BID Status
1 100 1000
2 101 1001
3 102 1000
and so on... 等等...
TableB 表B
AID BID
100 1000
101 1008
107 1001
Now I want to populate tableA, status with 'FAIL' if: 1.for AID in tableA, its corresponding BID should be equal to same values of tableB 2. If corresponding BID is not same in tableB, make sure it dont exist in tableB means BID is a new value which dont exist in TableB 现在,我要填充tableA,状态为'FAIL',如果:1.对于tableA中的AID,其对应的BID应该等于tableB的相同值。2.如果tableB中对应的BID不相同,请确保它在tableB中不存在表示BID是TableB中不存在的新值
Example: TableA, AID = 100 BID = 1000. now this AID = 100 should be looked into tableB; 例如:TableA,AID = 100 BID =1000。现在应将此AID = 100放入tableB; in tableB for AID 100;
在表B中获得AID 100; BID = 1000 so its not a fail.
BID = 1000,因此它不会失败。
Therefore for AID 100, BID should be either 1000 (from tableB) or any other new value that do not exist in TableB.BID irrespective of AID. 因此,对于AID 100,BID应该为1000(来自tableB)或TableB.BID中不存在的任何其他新值,而与AID无关。
A.AID = 101 BID=1001 but this BID value exist for B.AID = 107 so its a fail. A.AID = 101 BID = 1001,但是B.AID = 107存在此BID值,因此失败。 Expected result:
预期结果:
ID AID BID Status
1 100 1000 NULL
2 101 1001 FAIL
3 102 1000 FAIL
Thanks 谢谢
Just stumbled on this un-answered question while looking at something else. 看着其他东西时,偶然发现了这个悬而未决的问题。 These two queries in the same order seems to be a simple answer:
这两个查询以相同的顺序似乎是一个简单的答案:
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
I'm using bigint as datatype because I simply don't know what king of type is there... 我使用bigint作为数据类型,因为我根本不知道那里有什么类型的国王...
This should help anyway: 无论如何,这应该有所帮助:
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.