2012-02-08 13 views
-3

私はdbo.nameとdbo.classという2つのテーブルを持っています。私はDがメイン名で、DBOでmainidなるべきID 4を持っている場合と仮定し意味のテーブルをマッピングすることにより、mainidを埋める必要がある。こここれにSQLクエリを書く方法?

 Id  mainid 
    1 
    2 

 Name id 
     A 1 
     B 2 
     C 3 
     D 4 

クラス。クラス。私は最初の行で4を取得する必要があります。もしcが別のメイン名であれば、2行目でcのidをmainidとして取得するべきです。

 2   3 

どのようにしてこの質問を書いてください。これについての質問を書いてください。

+0

試しましたが、それは正しいものではありませんでした:-( – user1196887

+0

あなたはmainidをどのように埋めるのですか?他の言葉でそれを説明できますか?なぜmainidはId 2に4のId 1と3を持っていますか?どのように主要な名前が分かっていますか? –

+0

メインIDは4でなければなりません。これは名前Dを持つためです。名前DのIDを入力する必要があります。 4-D、3-C。私はメインIDを記入する必要があります... – user1196887

答えて

0

私は質問を正確に理解していますかわかりません。クラステーブルが空で、あなたが名前テーブルからそれを移入するだけの場合は、これを試してみてください:

insert into class (mainid) 
select id from name 

しかし私はあなたの質問を完全に理解していません。もう少し情報が必要だと思う。なぜDが最初に必要なのか?クラステーブルは空ですが、名前からデータをロードするだけです。または、既にクラステーブルにデータがありますか?

クラステーブルが空の場合は、名前テーブルからロードするために上に掲示したsqlを実行することができます。 2つのテーブルを一緒に「マップ」する必要はありません。しかし、データは、クラステーブルにすでに存在する場合、あなたは、次のような何かを実行する必要があると思い何も複製する必要はありません:

insert into class (mainid) 
select id from name N 
where N.id not in 
    (select distinct (C.mainid) from class C) 

またはそれを行うには良い方法を:

insert into class (mainid) 
select id from name N 
where not exists (select 1 from class C where N.id = C.mainid) 
+0

"テーブルをマッピングすることでmainidを埋める" By "fill up"クラステーブルが空であることを意味しますか? "マップ"とは、クラステーブルが空でないか、複製したくないデータがある可能性がありますか? – edrazpgh

0

あなたがはっきりコヒーレント例を挙げて説明できるまでは、これはあなたが得ることができる最高です。

SELECT 
dbo.name.id, dbo.class.mainid 
FROM 
dbo.name INNER JOIN dbo.class ON dbo.name.id = dbo.class.id 

そして新しいテーブルにそれを挿入する:

CREATE TABLE dbo.newtable 
SELECT 
    dbo.name.id, dbo.class.mainid 
    FROM 
    dbo.name INNER JOIN dbo.class ON dbo.name.id = dbo.class.id