2016-03-23 9 views
1

私はこのsqliteの更新自体に列

a b c 
-- -- -- 
1 1 10 
2 1 0 
3 1 0 
4 4 20 
5 4 0 
6 4 0 

B列ビット親であればLIKE 'A' から 'ポイント' のようなテーブルを得ました。 cを計算した。今私は子供に親のc値を伝播する必要があります。

結果は私がC列をprocuce SELECTを得たこれまでのところ

を作品UPDATE/SELECTコンボを作ることができない

a b c 
-- -- -- 
1 1 10 
2 1 10 
3 1 10 
4 4 20 
5 4 20 
6 4 20 

私は

を取得したいのですが可能でしょう
select t1.c from t t1 join t t2 on t1.a=t2.b; 
c 
---------- 
10 
10 
10 
20 
20 
20 

しかし、私は事前にC

ありがとうの中にそれを詰め込む方法を知らない の乾杯、あなたがcorrelated subqueryで値を検索する必要がファイ

答えて

1

UPDATE t 
SET c = (SELECT c 
     FROM t AS parent 
     WHERE parent.a = t.b) 
WHERE c = 0; 
+0

Thanx CL、私はそれが自明であることを知っていました:)私の脳はまだSQLフォーマットされていません:)、歓声。 – Phi

+0

私はあなたの返信の後に投稿したいと思っていましたが、私の投稿は進化の連続性を破る前に上がっています。私はこの編集者と向き合っていません。 Phi – Phi

+0

@Phiこれはフォーラムではありません。 –

0

私はfinnally私の最初の「TEMP」をバックにコピーする方法を発見し、テーブルに登録しよSELECT「T」。私は、あなたが1つのクエリUPDATEとSELECTを相関し、2つのクエリと1つの相関クエリそれぞれある鉱山は、賢明なPERF比較する方法2つのソリューション知りたいこの

create temp table u as select t1.c from t t1 join t t2 on t1.a=t2.b; 
update t set c=(select * from u where rowid=t.rowid); 

ような何か。鉱山はより重く、そして美的ではないようですが、まだperfに関しては私は不思議です。アルゴ側で

、あなたは親のデータをコピーしないように注意してください、唯一の子のデータをコピーし、鉱山は自身に親をコピーし、それはNOPですが、まだいくつかのサイクルを消費:)

乾杯、ファイ

関連する問題