2011-09-20 103 views
-1

我有两个表: 表ASQL服务器:填充基于其他表中的列值

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应该等于表B的相同值。2.如果对应的BI d不TableB中一样,确保它不存在于tableB的意思BID是不TableB中存在

如新价值: 表A,AID = 100买入= 1000现在这个AID = 100应该看着tableB的;在表B中为AID 100; BID = 1000,所以它不会失败。

  1. 因此用于AID 100,BID应该是不存在TableB.BID AID无关或者1000(从tableB的)或任何其它新值。

A.AID = 101 BID = 1001但是该BID值对于B.AID = 107而言是存在的,因此它的a失败。 预期结果:

ID AID BID Status 
    1 100 1000 NULL 
    2 101 1001 FAIL 
    3 102 1000 FAIL 

感谢

+1

? –

+0

如果A.BID <> B.BID然后A.BID不存在B.BID –

+0

问题(和downvote)的原因是您的最后几个问题看起来像小工作规格而不是问题。他们没有表现出任何尝试来解决问题。 –

回答

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 
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 
+0

不能正常工作~~~我猜应该在case语句中有一个内连接!不知道,但这似乎不工作! –

+0

内部查询中有一个对外部表的引用。这被称为相关子查询。什么不工作? – Thomas

+0

@Bhupinder Singh - 我看到了这个问题。我扭转了应该给你正确结果的逻辑。 – Thomas

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)