Существует ли простой способ адаптации этих типов запросов MySQL к PostgreSQL:
установка переменных в MySQL как
set @aintconst = -333 set @arealconst = -9.999
Назначение переменных из запросов SELECT и последующее использование этих переменных в моем SQL, например:
select @pfID := id from platform where bios like '%INTEL%' select @clientID := id from client where platformID = @pfID
Я был бы очень благодарен за указатели, особенно на (2).
mysql
postgresql
Даниил
источник
источник
Ответы:
Это легко сделать внутри функции PL / pgSQL (или блока DO ):
Вы также можете использовать переменные GUC :
Или вы можете использовать CTE с объединением:
источник
Я использую операторы WITH:
а также:
источник
Вы уже ответили на это сами: нет, нет простого SQL. Вы можете использовать PL / PgSQL, если вам нужны переменные, в функции или
DO
блоке.Большинство применений для переменных запросов в MySQL удовлетворяются CTE (
WITH
запросами), оконными функциями и т. Д. В PostgreSQL.Ну, на самом деле, есть, но они не подходят для общего использования в запросах. Обычно вы получаете доступ к пользовательским GUC с помощью
SET
иSHOW
, но вместо этого можете использовать:GUC стоят дорого, и это плохая идея, чтобы использовать это для запросов общего назначения, но очень редко есть правильное применение. Вы можете использовать только такие настройки, как
myapp.variable
тоже.источник
Переменные PSQL
Начиная с версии 7.1, клиент PostgreSQL предоставил эту функцию с
psql
переменнымиПо сути, вам нужна возможность написания сценариев SQL. PSQL имеет условные выражения и переменные, а также возможность передавать динамически сгенерированный SQL, что облегчает эту работу. Это не функциональность на стороне сервера в мире PostgreSQL, и обычно я делаю это на языке клиента (например, Node.js или Perl, а не на языке
psql
).источник
SET LOCAL variable value
Для второго примера вам не нужна переменная (ни в MySQL, ни в Postgres):
Не бойтесь подзапросов, оптимизатор запросов Postgres намного умнее, чем MySQL.
Если вышеупомянутое слишком медленно, переписать его в
exists
запрос иногда быстрее:источник