プロが教える店舗&オフィスのセキュリティ対策術

該当KEY=12345が存在すれば、seqに1を加算、存在しない場合は、seqに1を設定する
mergeを使用したsql文を作成したいのですが、

良いサンプルはありませんか?

↓こんな雰囲気でしょうか?
MERGE INTO A表 ab
USING (SELECT KEY FROM A表 where KEY = 12345 ) ac
ON (ab.KEY = ac.KEY)
WHEN MATCHED THEN
UPDATE SET
ac.SEQ = ac.SEQ +1
WHEN NOT MATCHED THEN
INSERT
(KEY, SEQ)
VALUES ("12345",1)


よろしくお願いします

A 回答 (2件)

>USING (SELECT '12345' key from dual) acにあるdualは任意の名称でしょうか?


すみません。dual表はOracleでのダミーテーブルのようなものです。
対象のデータベース名が書いていなかったのに、当方の環境でのSQLを書いてしまいました。

ですので、上記の箇所はお使いになっているデータベース製品に合わせて修正してください。
    • good
    • 0
この回答へのお礼

yamada_gさん コメントありがとうございます

データベースは、db2でした

お礼日時:2011/09/21 08:39

このSQLだと、A表にkey='12345'のレコードが無い場合はデータが取得できないため期待通りの結果にならないです。


こうすればいいのではないでしょうか。

MERGE INTO A表 ab
USING (SELECT '12345' key from dual) ac
ON (ab.KEY = ac.KEY)
WHEN MATCHED THEN
UPDATE SET
--ac.SEQ = ac.SEQ +1 更新するのはacではなくabですよね
ab.SEQ = ab.SEQ +1
WHEN NOT MATCHED THEN
INSERT
(KEY, SEQ)
VALUES ('12345',1);

この回答への補足

yamada_gさん コメントありがとうございます

USING (SELECT '12345' key from dual) ac
にあるdual は任意の名称でしょうか?

補足日時:2011/09/20 16:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す