2011-07-22 12 views
0

この質問には申し訳ありません。このテーブルに新しいレコードを挿入するにはどうすればよいですか?

There're 2 tables:より小さいものは、より大きなものから派生したものです。 大きなテーブルに新しいレコードを挿入するにはどうすればいいですか?

INSERT INTO people (lname, fname, city, age, salary) VALUES (' Doe','John','Paris', '25','1000$'); 

大きい表には都市番号が含まれています。どのように私は 'パリ'を挿入する必要がありますか?私は事前にその番号を知っているべきですか?しかし、「パリ」は都市(小さい)のテーブルにはない!! レコードをより大きな(人)テーブルに挿入するにはどうすればいいですか?

+0

あなたは何をしようとしていますか? – sudmong

+0

ニックニック!あなたは2つのインサートをしなければなりません。一つは都市のためのもので、もう一つは人のものです。 – Jacob

答えて

1

EDIT:

は、パリをチェックするIFブロックを追加しました。

IF NOT EXISTS (SELECT 1 FROM City WHERE City = 'Paris') 
Insert INTO City (City) VALUES ('Paris') 

DECLARE @Cid int = (SELECT CityID FROM City WHERE City = 'Paris') 

INSERT INTO people (lname, fname, city, age, salary) 
VALUES (' Doe','John', @cid, '25','1000$') 

私は明らかにcityテーブルの構造についての仮定をしました。

@city変数でこれをパラメータ化し、コード内のどこでも'Paris'のsubとすることもできます。

+0

「選択1」とは何ですか?なぜ1? – DrStrangeLove

+0

@ JNKテーブル 'city'に既存のエントリがある場合は、SELECTを2回実行すると非効率です – rabudde

+0

@DrStrangelove - レコードが存在するかどうかを確認するだけです。 「SELECT 1」は、クエリがテーブルから実際のデータを引き出さないようにするためです。あなたが知りたいのは、パリの記録があるかどうかだけです。 – JNK

0

編集: シティテーブルの既存エントリの解決策を採用しました。私はコメントで書いたように、トランザクションが(例えばストアド・プロシージャとして実行している場合)人々のテーブルに挿入で

BEGIN TRANSACTION 
     DECLARE @city_id INT 
     SELECT @city_id=id FROM city WHERE name='Paris' 
     IF @city_id IS NULL 
     BEGIN 
      INSERT INTO city (name) VALUES ('Paris') 
      SET @[email protected]@IDENTITY 
     END 
     INSERT INTO people (lname, fname, city, age, salary) VALUES ('Doe','John',@city_id, '25','1000$'); 
END TRANSACTION 
+0

実際のSQLコードでどのように見えるでしょうか? – DrStrangeLove

+0

MySQL、MSSQL、PostgreSQL ???テーブル「都市」の構造は何ですか? – rabudde

+0

@drstrangelove私の答えを見てください – JNK

0

ommitedすることができ、cityカラムの値は、あなたがしたい都市の数でなければなりませんあなたの引用された例では、パリの都市番号で 'パリ'を置き換えてください。

都市テーブルにまだ存在しない都市の新しい人物レコードを作成する場合は、都市テーブルに最初に挿入し、作成した都市の番号を取得してから使用する必要がありますそれはあなたの人のテーブルへの挿入です。

関連する問題