多くのテーブルを含むデータベースでは、データが存在しない場合にデータを挿入する 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 |
私はに挿入する必要があります:
currency
(id=3, Code=JPY, lastupdate=today, rate=4
)client
(id=6, name=Joe, createdate=today, currencyId=Currency with Code 'USD'
)account
(id=9, number=0910, createdate=today, clientId=Client with name 'Joe'
)
問題:
- スクリプトは、新しいデータを挿入する前に行が存在するかどうかを確認する必要があります
- スクリプトは、データベースで既に見つかった行に関連する外部キーを新しい行に追加できるようにする必要があります (クライアント テーブルの currencyId として)。
- スクリプトでは、insert ステートメント (テーブルなど)
createdate
の列に現在の日時を追加できる必要があります。client
- スクリプトは、同じスクリプト (テーブルなど)
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 を超える行を挿入するためにこのスクリプトが必要です。
どんな助けでも