2016-06-16 11 views
0

によると、私はすでにデータとボイド関係テーブルを持つ2つのテーブルがあります。SQL条件付きの複数の挿入属性

ユーザー(IDU、idCreator、仕事、...)

許可(をIDP、名前)

User_Permission(IDU番号、IDPの#、idCreator、...)


User.job値に従ってユーザに 各行について

、私にINSERT INTO User_Permission VALUES(aPermID, idU, idCreator, ...)ここidU is the own user's IDidCreator is the User's ID creatorを希望します。


例:

  • User.job = 'コム' あれば、私はINSERT INTO User_Permission VALUES(100, User.idU, User.idCreator, ...)をでしょう。
  • User.job = 'Devの'場合、私はINSERT INTO User_Permission VALUES(150, User.idU, User.idCreator, ...)

INSERT INTO User_Permission VALUES(200, User.idU, User.idCreator, ...)私はそれを行うことができますかわからないでしょう。 Oracle 11gを使用しています。


idCreatorのための明確化は、各ユーザーが別の 1によって作成された

属性。 A User_Permissionも誰かによって与えられます(そのため、 idCreatorもあります)。

ここで古いデータを回復しようとしていますので、デフォルトでは User_Permission.idCreatorUser.idCreatorと同じにします。

+1

期待どおりの結果が得られるようにサンプルデータを提供するために質問を更新してください。お手伝いができる可能性があります。 – Boneist

+0

さて、通常は、あなたの 'T1'レコードを挿入しているものから(あるいは' T1の 'AFTER INSERT'トリガーを介して)できるでしょう。両方のテーブルに 'number'があるのはなぜですか?また、一般的に言えば、特定の値( '100'、' 150')を持たなければならない列には 'id'を使用すべきではありません。ビジネス/ドメインエンティティが宣言しているものとにかくやっている)。 –

+0

@Mistalisそうではありません。 USER_PERMISSIONに挿入したい結果を生成するよりも、USERとPERMISSIONのデータは何ですか?私。 「Comm」に「100」を、「Dev」に「150」と「200」を含む2つの行を使用する理由は何ですか?私たちはあなたのデータやテーブルを見ることができないので、可能な限りあなたの状況について多くの情報を提供する必要があることに注意してください。 – Boneist

答えて

2

ジョブをPermidにマップするテーブルが必要です。種類:

insert into User_Permission(idU#, idP#, idCreator, ...) 
select map.permID, u.idU, u.idCreator, ... 
from User u 
join (-- job class to permid mapping 
    select 'Comm' class, 100 permID from dual 
    union all 
    select 'Dev', 150 from dual 
    union all 
    select 'Dev', 200 from dual 
) map on map.class= u.job 
+0

ありがとう、それは私を助ける! – Mistalis