2011-07-08 10 views
0

私はSQLを初めて使ったので、あまり複雑ではありません。SQLの更新クエリ - 参照を逆転する

現在、外部キー制約が実装されていないと私は、2つのテーブルを持っている:

Table Foo 
============ 
ID | BarID 
------------ 
1 | NULL 
2 | NULL 
3 | NULL 

Table Bar 
============ 
ID | FooID 
------------ 
101 | 1 
102 | 2 
103 | 3 

をあなたが見ることができるように、バーのテーブルの行は、それらが関連しているFOOS知っているが、 Fooテーブルの行は、関係するバーを認識しません。 は、私の周りにこれを切り替えたいので、私は得る:

Table Foo 
============ 
ID | BarID 
------------ 
1 | 101 
2 | 102 
3 | 103 

私はFooのテーブルの上にTE BarIDを設定するSQLクエリをしたいです。擬似コードで:

for each Foo in FooTable: 
    Bar = select Bar from BarTable where Bar.FooID == Foo.ID 
    set Foo.BarID = Bar.ID 
    set Bar.FooID = NULL 

おかげ

EDIT: 私はあなたがfooにバーからの参照をクリアしたいと思われるのMicrosoft SQL Server 2008の

+0

あなたが迷っている場合にそれを行う必要があります - それは厄介なDBをマッサージ中の中間段階です適切な外部キー制約を使用して構造をより良いものに変換します。 FK制約を追加することは次のステップになりますが、FooはBarを参照する必要があります。 –

+1

お持ちのSQLサーバーは? – triclosan

+0

私はこれを行うには非常に多くの異なる方法を期待していませんでした...彼らのいくつかは他の人よりも練習していますか? –

答えて

1
update foo set 
BarID = (select ID from Bar where FooId = Foo.ID); 

を使用しています。その場合は、次の操作を行います。私はこれをしたい理由

update Bar set FooID = null; 
1
UPDATE Foo SET BarId=(SELECT Id FROM BAR WHERE Fooid=foo.id) 
0
UPDATE Foo 
USING Bar 
SET BarID=Bar.ID 
WHERE Foo.ID = Bar.FooID; 
1
UPDATE Foo 
JOIN Bar ON Bar.FooID = Foo.ID 
SET Foo.BarID = Bar.ID 

これは