2011-09-20 64 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) 
相關問題