2012-12-21 59 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