2016-08-08 8 views
0

私はDB2のテーブルには、次の列別のテーブルからPKを使用して、データベーステーブル内の複数のレコードを挿入する

organization_id (PK), name, description 

一部の組織を含む組織のデータを保持している「organization」は削除されていので、たくさんの「organization_id」(行)もはや存在しないので、1,2,3,4,5のように連続していませんが、1,2,5,7,11,12,21のように続きます....

別のテーブル「title」と他のデータがあり、organizationテーブルからorganization_idがあり、FKとなっています。

私はすべての組織のために挿入する必要があるいくつかのデータがあります。いくつかのタイトルは、それらのすべてがWebアプリケーションで表示される予定です。 合計で約3000レコードが追加されます。私は1つによってそれをいずれかを実行したい場合

それは次のようになります。

INSERT INTO title 
(
    name, 
    organization_id, 
    datetime_added, 
    added_by, 
    special_fl, 
    title_type_id 
) 
VALUES 
(
    'This is new title', 
    XXXX, 
    CURRENT TIMESTAMP, 
    1, 
    1, 
    1 
); 

XXXXは「organization_id」を表し、私はテーブル「organization」という挿入だけなので、既存のORGANIZATION_IDのためにそれをやるから得るべきです。 "organization_id"のみが表 "organization"から "organization_id"に一致するように変更されています。

これを行うにはどうすればよいでしょうか? いくつかの同様の疑問点を確認しましたが、どれもこれと同じではありませんか? SQL Server 2008 Insert with WHILE LOOP ループ応答が連続IDにまたがっている間、他の応答はIDが自動インクリメントされているとも仮定します。

ここに同じ: How to use a SQL for loop to insert rows into database?

(質問自体は非常に明確ではないとして) Inserting a multiple records in a table with while loop

この上の任意のアドバイスこの1わかりませんか?私はどうすればいいのですか?

+1

SQLでループしないでください。select文から挿入できます。 values()の代わりに、入力したいデータをリストするselect文を記述します。 IE:tbl(listcolumn)に挿入する(同じ列)tbl1から内部結合tbl2 tbl1.key = tbl2.key – Twelfth

+0

どのようにorganization_idを識別しますか?あなたは組織のテーブルからそれを取得したいと言っていますが、join/relationshipはうまくいくorganization_idですが、それを調べるために何を使用しますか?組織名?おそらくいくつかのサンプルデータと期待される結果を提供しています。あなたが達成しようとしていることを理解するでしょう – Matt

+0

@Matt Sample SQLはまさに私が持っているものです。 organization_idは両方のテーブルのPKです。1つの組織(組織)は組織のためのデータを保持するものであり、他にはユーザーがログインしたときに組織ごとに表示されるメッセージがあります。今はすべて同じメッセージ/タイルで作成する必要があります新しいタイトル ')。 –

答えて

1

あなたが真剣にこのような何かが動作するはずまったく同じデータを持つタイトル内のすべての組織レコードの行をしたい場合:

INSERT INTO title 
(
    name, 
    organization_id, 
    datetime_added, 
    added_by, 
    special_fl, 
    title_type_id 
) 
SELECT 
    'This is new title' as name, 
    o.organization_id, 
    CURRENT TIMESTAMP as datetime_added, 
    1 as added_by, 
    1 as special_fl, 
    1 as title_type_id 
FROM 
    organizations o 
; 

あなたが選択して、列の別名を必要はありませんが、私はのために含めています読みやすさと良い尺度。 https://www.ibm.com/support/knowledgecenter/ssw_i5_54/sqlp/rbafymultrow.htm

などのエラーを処理する場合は、このような処理を行うこともできます。このような処理を行うことで、titleにレコードを挿入することもできます。

INSERT INTO title 
(
    name, 
    organization_id, 
    datetime_added, 
    added_by, 
    special_fl, 
    title_type_id 
) 
SELECT 
    'This is new title' as name, 
    o.organization_id, 
    CURRENT TIMESTAMP as datetime_added, 
    1 as added_by, 
    1 as special_fl, 
    1 as title_type_id 
FROM 
    organizations o 
    LEFT JOIN Title t 
    ON o.organization_id = t.organization_id 
    AND t.name = 'This is new title' 
WHERE 
    t.organization_id IS NULL 
; 
+0

シンプルで効果的です。ありがとうございます。 –

関連する問題