値(FACTテーブル)を持つ1つの列をキー/値テーブル(FACT_ATTRIBUTEテーブル)にマージしようとしているテーブルが2つあります。キーは数値で、値はvarchar2です。 FACT_ATTRIBUTEテーブルにはすでにいくつかのエントリがあります。私は、新しいエントリにマージするパッケージプロシージャを記述しようとしています。私たちはトリガーとシーケンスを取り除こうとしています。私はテーブルにないエントリを選択するSQLを少し持っていますが、インデックスキー値を作成する方法には苦労しています。キーは、現在の最大値より1だけ大きいはずです。Oracle、マージテーブル、IDを増やしながら欠損値を挿入
たとえば、FACT_ATTRIBUTEテーブルにはすでにキー5までのエントリがあります。新しいエントリ「値6」が入ります。キー/値の挿入はFACT_ATTRIBUTEの(6、 "値6")になります。ここで
私が午前ところです:問題は明らかである
INSERT INTO FACT_ATTRIBUTE (
KEY, VALUE
)
VALUES(
(SELECT (MAX(KEY) + 1) FROM FACT_ATTRIBUTE),
(SELECT DISTINCT ENTRY
FROM FACT fact_table
WHERE NOT EXISTS (
SELECT 1 FROM FACT_ATTRIBUTE fa
WHERE fa.VALUE = fact_table.ENTRY
))
);
インサートが単一の値である一方で、選択の内側には、複数の要素をつかみます。 1つの制約は、新しい値がない場合、nullでクラッシュできないことです。これを達成する良い方法はありますか?私のSQLスキルは最強ではありません。助けをあらかじめありがとう!
、クエリが逆転しそうです、それはあなたが値に数値を入力しているように思える、とキーに文字列を、あなたの説明では、あなたがテーブルに周り(数値、他の方法を説明してきたのに対し、キーの場合は文字列、値の場合は文字列)。 これは目的に合っているのですか、またはクエリに間違いがありますか? –
ありがとう、それらを元に戻しましたが、依然としてクエリが機能しません –
このコメントはあなたの問題を解決するためのものではなく、データの構造を理解することです。私はあなたの質問への答えとして解決策を掲示しました。それがあなたを助けるかどうかを見てください。がんばろう。 –