0

memberとtree_strという名前の2つのテーブルがあります...

「メンバー」テーブルは次のとおりです

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

今、この方法のように最初のテーブルを使用して2番目のテーブルにデータを入力したい.....

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はそれを行うための正しいクエリを私に提案します.........?????

4

2 に答える 2

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'
于 2012-12-21T08:23:53.323 に答える
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 の回答の方が効率的である可能性があることに注意してください。ただし、元の構文のどこで問題が発生したかを説明するのに役立つことを願っています。

于 2012-12-21T08:35:30.993 に答える