[解決済み] PostgreSQLのIF文
2022-03-06 22:57:20
質問
Postgresでこのようなクエリを実行するにはどうすればよいですか?
IF (select count(*) from orders) > 0
THEN
DELETE from orders
ELSE
INSERT INTO orders values (1,2,3);
解決方法は?
DO
$do$
BEGIN
IF EXISTS (SELECT FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
標準SQLには手続き的な要素はありません。そのため
IF
ステートメント
はデフォルトの手続き言語であるPL/pgSQLの一部です。関数を作成したり、アドホックなステートメントを実行したりするためには
DO
コマンドを使用します。
セミコロンが必要です(
;
) を、plpgsql の各ステートメントの最後に追加してください (
ただし、最後の
END
).
必要なのは
END IF;
の末尾にある
IF
ステートメントを使用します。
サブセレクトは括弧で囲む必要があります。
IF (SELECT count(*) FROM orders) > 0 ...
または
IF (SELECT count(*) > 0 FROM orders) ...
これは同等であり、はるかに高速ですが。
IF EXISTS (SELECT FROM orders) ...
代替品
追加の
SELECT
は必要ありません。これは同じことをより速く行います。
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
可能性は低いですが、同じテーブルに書き込む同時実行トランザクションが干渉する可能性があります。確実にするために ライトロック を同じトランザクションで実行してから、デモのように進めてください。
関連
-
[解決済み] FROM のサブクエリにはエイリアスが必要です。
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] PostgreSQLの場合。PostgreSQLのテーブルを表示する
-
[解決済み] PostgreSQLの "DESCRIBE TABLE"
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] PostgreSQL 自動インクリメント
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】''付近の構文が正しくない
-
[解決済み] ERROR: 参照されたテーブル "bar" の与えられたキーに一致するユニークな制約がありません。
-
[解決済み】SQL Serverは「集約関数やサブクエリを含む式に対して集約関数を実行できない」が、Sybaseはできる。
-
[解決済み] アンピボットの主キーを含む対象コードページで、テキストが切り捨てられたか、1つ以上の文字が一致しない。
-
[解決済み] 2つの列を分割するには?
-
[解決済み] SQLクエリで2つの列から値を引き算する
-
[解決済み] Oracle(LiveSQL)のSQL [重複]について
-
[解決済み] ORA-00918: 列があいまいに定義されています」を解決する方法
-
[解決済み] 検索エラー ORA-00932: 不整合なデータ型: 期待された DATE は NUMBER になりました。
-
[解決済み] 1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定したコードページに対して無効な文字)