Инструкция PostgreSQL IF
Как я могу сделать такой запрос в Postgres?
IF (select count(*) from orders) > 0
THEN
DELETE from orders
ELSE
INSERT INTO orders values (1,2,3);
4 ответов
попробуй:
DO
$do$
BEGIN
IF EXISTS (SELECT 1 FROM orders) THEN
DELETE FROM orders;
ELSE
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
основные моменты
в стандартном SQL нет процедурных элементов. The
IF
сообщении является частью процедурного языка по умолчанию PL / pgSQL. Вам нужно создать функцию или выполнить специальный оператор с помощьюDO
.вам понадобится
;
в конце каждого оператора в plpgsql (за исключением последнегоEND
).вам нужно
END IF;
в концеIF
заявление.-
суб-выбор должен быть окружен скобками:
IF (SELECT count(*) FROM orders) > 0 ...
или:
IF (SELECT count(*) > 0 FROM orders) ...
это эквивалентно и намного быстрее, хотя:
IF EXISTS (SELECT 1 FROM orders) ...
альтернатива
вам на самом деле не нужно дополнительное SELECT
здесь. Это делает то же самое, немного быстрее:
DO
$do$
BEGIN
DELETE FROM orders;
IF NOT FOUND THEN
INSERT INTO orders VALUES (1,2,3);
END IF;
END
$do$
просто, чтобы помочь, если кто-нибудь наткнется на этот вопрос, как мне, если вы хотите использовать if в PostgreSQL, вы используете "CASE"
select
case
when stage = 1 then 'running'
when stage = 2 then 'done'
when stage = 3 then 'stopped'
else
'not running'
end as run_status from processes
С docs
IF boolean-expression THEN
statements
ELSE
statements
END IF;
поэтому в приведенном выше примере код должен выглядеть следующим образом:
IF select count(*) from orders > 0
THEN
DELETE from orders
ELSE
INSERT INTO orders values (1,2,3);
END IF;
вы пропали: КОНЕЦ IF;
вы также можете использовать базовую структуру для случая PL/pgSQL с анонимный блок кода - процессуального блок:
DO $$ BEGIN
CASE
WHEN boolean-expression THEN
statements;
WHEN boolean-expression THEN
statements;
...
ELSE
statements;
END CASE;
END $$;
ссылки: