2011-12-05 3 views
1

sqlite dbの特定の行セットに対して簡単なUpdateクエリを実行しようとしています。それは動作しますが、他のすべての行をNULLにします。ここでは、クエリは次のとおりです。テーブル内の特定の行のみを更新しようとしていますが、他のテーブルはNULLを取得します。

update table1 set col5 =(select col5 from table2 where table2.id = table1.id)

私は、これは超簡単ですけど、私は何が起こっているかを把握することはできません。特定の行のみを更新することはできませんか?

答えて

1

あなたは2つのテーブルを関連付けるために更新されている同じ列を使用しています。 プライマリまたはセカンダリキーを使用して2つのテーブルを関連付ける必要があります。 SQL update from one Table to another based on a ID match

+0

元の質問には、そうです。しかし、リンクはまだ関連しています。 –

+0

@oofgwenこれをクエリに追加します。一致する行にNULL値を設定しないようにするには、 'where exists(select * from table2 where table2.id = table1.id)'を追加します。 –

+0

最後の部分はそれでした!ありがとうございました! – Lizza

2

これを試してみてください。

update table1 inner join table2 on table1.id = table2.id 
set table1.col5 = table2.col5 

編集:

申し訳ありませんが、それはsqliteのだった実現しませんでした。 sqliteはupdate節の結合をサポートしていません。 私の最高の推測では、次の操作を行うことができます:

update table1 set col5 = (select col5 from table2 where table2.id = table1.id) 
where id IN (SELECT id FROM table2) 
+0

誰もが実際に試したか、このことについて論じています:

は、この非常によく似た質問とその回答を参照してください?その意味は:set a.x = b.xここでa.x = b.xです。タイムリーな更新が得られます。 –

+0

私はクエリを試してみました。単純なsqliteブラウザではinnerキーワードのおかげでエラーが発生しました...私は以前このタイプのことをしていましたが、どうやってそれを行うのか覚えていません。 – Lizza

+0

私はそれが何もしていないことに気づいた、私は彼が列名のためのプレースホルダーを使用していたと思った... –

関連する問題