2012-12-21 61 views
0

我有2個表命名爲成員,tree_str ...SQL Server 2005中如何-----使用更新多行子查詢

「成員」 表如下

self_id parent_id position  
100  ROOT  ROOT  
101  100   LEFT  
102  100   CENTRE 
103  100   RIGHT 
104  101   LEFT  
105  101   CENTRE 
106  101   RIGHT 

「tree_str」表如下....

self_id L1_Left  L1_center L1_Right 
100  
101  
102  
103  
104  
105  
106 

現在我想使用第一個這樣的方式填充第二表.....

self_id L1_Left  L1_center L1_Right 
100 101    102   103 
101 104    105   106 
102  
103  
104  
105  
106 

................ 我使用查詢........

update tree_str 
    set tree_str.L1_Left = (select member.self_id from tree_str 
    INNER JOIN member 
    on member.parent_id=tree_str.self_id 
    AND member.position='LEFT') 
    WHERE self_id IN (select member.parent_id from tree_str INNER JOIN member 
    on member.parent_id=tree_str.self_id and member.position='LEFT') 

,但它給出結果...... 。

Msg 512, Level 16, State 1, Line 1 
Subquery returned more than 1 value. This is not permitted when the subquery 
follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 
The statement has been terminated. 

所以PLZ建議我正確的查詢做........... ?????

回答

1

爲什麼不情願嘗試像

UPDATE tree_str 
SET  L1_Left = ml.self_id, 
     L1_center = mc.self_id, 
     L1_right = mr.self_id 
FROM tree_str t LEFT JOIN 
     member ml ON t.self_id = ml.parent_id 
        AND ml.position = 'LEFT' LEFT JOIN 
     member mc ON t.self_id = mc.parent_id 
        AND mc.position = 'CENTRE' LEFT JOIN 
     member mr ON t.self_id = mr.parent_id 
        AND mr.position = 'RIGHT' 
+0

非常感謝主席先生,它的工作原理非常感謝你 – manish

+0

現在PLZ告訴我,如何在觸發時self_id中填入下一個記錄被自動閃光使用此查詢與???? – manish

0

,你的子查詢返回不止一個值,就是它不與該行正在更新相關的原因。試試下面的SQL。

update ts 
set ts.L1_Left = 
    (select m.self_id 
    FROM member m 
    WHERE m.parent_id = ts.self_id 
    AND m.position='LEFT') 
FROM tree_str ts 
WHERE self_id IN 
    (select member.parent_id 
    from tree_str 
    INNER JOIN member 
     on member.parent_id=tree_str.self_id 
    and member.position='LEFT') 

注意相關子查詢可能是昂貴,因此Astander的答案看起來可能更有效。不過希望這有助於解釋你的原始語法出錯的地方。

+0

謝謝,先生,真的很有效...... – manish