1

多くのテーブルを含むデータベースでは、データが存在しない場合にデータを挿入する SQL スクリプトを作成する必要があります。

テーブル通貨

| id     | Code    | lastupdate | rate      |
+--------+---------+------------+-----------+
| 1      | USD     | 05-11-2012 | 2         |
| 2      | EUR     | 05-11-2012 | 3         |

テーブルクライアント

| id     | name    | createdate | currencyId|
+--------+---------+------------+-----------+
| 4      | tony    | 11-24-2010 | 1         |
| 5      | john    | 09-14-2010 | 2         |

表:アカウント

| id     | number  | createdate | clientId  |
+--------+---------+------------+-----------+
| 7      | 1234    | 12-24-2010 | 4         |
| 8      | 5648    | 12-14-2010 | 5         |

私はに挿入する必要があります:

  1. currency( id=3, Code=JPY, lastupdate=today, rate=4)
  2. client( id=6, name=Joe, createdate=today, currencyId=Currency with Code 'USD')
  3. account( id=9, number=0910, createdate=today, clientId=Client with name 'Joe')

問題:

  1. スクリプトは、新しいデータを挿入する前に行が存在するかどうかを確認する必要があります
  2. スクリプトは、データベースで既に見つかった行に関連する外部キーを新しい行に追加できるようにする必要があります (クライアント テーブルの currencyId として)。
  3. スクリプトでは、insert ステートメント (テーブルなど)createdateの列に現在の日時を追加できる必要があります。client
  4. スクリプトは、同じスクリプト (テーブルなど)clientIdに挿入された行に関連する外部キーを新しい行に追加できるようにする必要があります。account

注:次の SQL ステートメントを試しましたが、最初の問題しか解決しませんでした

INSERT INTO Client (id, name, createdate, currencyId)
SELECT 6, 'Joe', '05-11-2012', 1
WHERE not exists (SELECT * FROM Client where id=6);

createdateこのクエリはエラーなしで実行されますが、手動で記述したことがわかるようにcurrencyid、where 句を使用して select ステートメントから通貨 ID を取得する必要があります (select ステートメントで 1 を代入しようとしましたが、クエリは失敗しました)。

これは私が必要としているものの例です。私のデータベースでは、10 を超えるテーブルに 30 を超える行を挿入するためにこのスクリプトが必要です。

どんな助けでも

4

2 に答える 2

0

あなたが書いた

select ステートメントで 1 を代入しようとしましたが、クエリが失敗しました

しかし、なぜ失敗したのだろうか?何を試しましたか?これはうまくいくはずです:

INSERT INTO Client (id, name, createdate, currencyId)
SELECT 
    6, 
    'Joe', 
    current_date, 
    (select c.id from currency as c where c.code = 'USD') as currencyId
WHERE not exists (SELECT * FROM Client where id=6);
于 2012-05-11T08:50:46.317 に答える
0

データがあれば解決できそうです。これは、SQL Server / Sybase で書かれた簡単なコードで、基本的な質問に答えると思います。

create table currency(
    id numeric(16,0) identity primary key,
    code varchar(3) not null,
    lastupdated datetime not null,
    rate smallint
);

create table client(
    id numeric(16,0) identity primary key,
    createddate datetime not null,
    currencyid numeric(16,0) foreign key references currency(id)
);

insert into currency (code, lastupdated, rate)
values('EUR',GETDATE(),3)

--inserts the date and last allocated identity into client
insert into client(createddate, currencyid)
values(GETDATE(), @@IDENTITY)

go
于 2012-05-11T08:57:32.510 に答える