我有两张桌子: 表A
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.对于表A中的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
由于
答案 0 :(得分:2)
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
答案 1 :(得分:2)
在看别的东西时偶然发现了这个未回答的问题。 这两个查询顺序相同,似乎是一个简单的答案:
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)
答案 2 :(得分:1)
我正在使用 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