1

レコードが 2 列存在しない場合はレコードを挿入し、存在する場合は列 3 を更新します。クエリは次のとおりです。

INSERT INTO aktai_islaidos_id (akto_id, islaidos_id, savikaina)
       SELECT * FROM (SELECT ? as a, ? as b, ? as c) AS tmp
       WHERE NOT EXISTS (
             SELECT akto_id, islaidos_id, savikaina FROM aktai_islaidos_id 
             WHERE akto_id = a AND islaidos_id = b
       ) ON DUPLICATE KEY UPDATE savikaina = VALUES(c);

フィールド リストに c が存在しないというエラーが表示されます。その理由は理解できますが、このクエリを正しく完了する方法がわかりませんでした。

編集:ストアドプロシージャでこれを理解しました:

CREATE PROCEDURE update(
       IN akt_id INT,
       IN isl_id INT,
       IN sav INT)
BEGIN
       IF (SELECT count(*) FROM aktai_islaidos_id WHERE akto_id = akt_id AND islaidos_id = isl_id) > 0 THEN
            BEGIN
                 UPDATE aktai_islaidos_id SET savikaina = sav WHERE akto_id = akt_id AND islaidos_id = isl_id;
            END;
       ELSE
            BEGIN
                 INSERT INTO aktai_islaidos_id (akto_id, islaidos_id, savikaina) VALUES (akt_id, isl_id, sav);
            END;
       END IF;
END
4

0 に答える 0