Как сделать несколько запросов в одном запросе sql
Перейти к содержимому

Как сделать несколько запросов в одном запросе sql

  • автор:

Как объединить несколько запросов в один sql

Запросы в языке SQL комбинируются с помощью оператора UNION . Для этого необходимо указать каждый запрос SELECT и разместить между ними ключевое слово UNION . Ограничений по количеству использованного оператора UNION в одном общем запросе нет.

запрос 1> UNION запрос 2> 
SELECT model, price FROM Cars UNION SELECT model, price FROM Bikes ORDER BY price DESC; 

Вывод нескольких SELECT-ов в одну таблицу

можно воспользоваться объединением запросов (union):

select "запрос 1", count(*) from . where . union select "запрос 2", count(*) from . where . union . 

Отслеживать
ответ дан 29 ноя 2016 в 6:39
aleksandr barakin aleksandr barakin
67.9k 216 216 золотых знаков 77 77 серебряных знаков 219 219 бронзовых знаков

Предложу такой вариант: Написать процедуру, в которой: 1) Будет создаваться таблица, определяющая Вашу результирующую таблицу 2) Делать выборки исходной таблицы 3) Проходится по каждой выборки и вставлять данные в таблицу, созданную в 1 пункте

Отслеживать
ответ дан 29 ноя 2016 в 0:44
2,005 4 4 золотых знака 26 26 серебряных знаков 53 53 бронзовых знака

Вот как решил проблему

SELECT "request_1" AS "Запрос 1", "request_2" AS "Запрос 2", "request_3" AS "Запрос 3", "request_4" AS "Запрос 4" FROM ( -- Исполняем запрос 1 SELECT count("customer"."id") FROM "customer" WHERE "customer"."unsubscribed_types" = 'daily_weekdays' OR "customer"."unsubscribed_types" = 'daily_weekends' OR "customer"."unsubscribed_types" = 'weekly_free' OR "customer"."unsubscribed_types" = 'weekly_best_weekly' OR "customer"."unsubscribed_types" = 'special_partner' OR "customer"."unsubscribed_types" = 'bonus_activation' ) AS "request_1", ( -- Исполняем запрос 2 SELECT count("customer"."id") FROM "customer" WHERE "customer"."unsubscribed_types" ISNULL OR "customer"."unsubscribed_types" = '<>' ) AS "request_2", ( -- Исполняем запрос 3 SELECT count("customer"."id") FROM "customer" WHERE "customer"."unsubscribed_types" = 'daily_weekdays' AND "customer"."unsubscribed_types" = 'daily_weekends' AND "customer"."unsubscribed_types" = 'weekly_free' AND "customer"."unsubscribed_types" = 'weekly_best_weekly' AND "customer"."unsubscribed_types" = 'special_partner' AND "customer"."unsubscribed_types" = 'bonus_activation' ) AS "request_3", ( -- Исполняем запрос 4 SELECT count("customer"."id") FROM "customer" WHERE "unsubscribed_types" = 'daily_weekdays' ) AS "request_4", ; 

Отслеживать
ответ дан 29 ноя 2016 в 1:09
Sergey SHevchenko Sergey SHevchenko
49 1 1 золотой знак 1 1 серебряный знак 9 9 бронзовых знаков

  • sql
  • postgresql
  • запрос-в-запросе
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

SQL-Урок 12. Комбинированные запросы (UNION)

В большинстве SQL запросов используется один оператор, с помощью которого возвращаются данные из одной или нескольких таблиц. SQL также позволяет выполнять одновременно несколько частных запросов и отображать результат в виде единого набора данных. Такие комбинированные запросы обычно называются объединениями или сложными запросами.

1. Использование оператора UNION

Запросы в языке SQL комбинируются с помощью оператора UNION. Для этого необходимо указать каждый запрос SELECT и разместить между ними ключевое слово UNION. Ограничений по количеству использований оператора UNION в одном общем запросе нет. В предыдущем разделе мы отмечали, что MS Access не имеет возможности создавать полное внешнее объединение, теперь мы посмотрим, как этого можно достичь через оператор UNION.

Run SQLSELECT * FROM Sumproduct LEFT JOIN Sellers2 ON Sumproduct.City = Sellers2.City UNION SELECT * FROM Sumproduct RIGHT JOIN Sellers2 ON Sumproduct.City = Sellers2.City 

Try it Yourself

Видим, что запрос отобразил как все колонки из первой таблицы – так и из второй, независимо от того, имеют ли все записи соответствующие в другой таблице.

Также следует отметить, что во многих случаях вместо UNION мы можем использовать предложения WHERE со многими условиями и получать аналогичный результат. Однако через UNION записи выглядят более лаконичными и понятными.

Также необходимо соблюдать определенные правила при написании комбинированных запросов:

2. Включение или выключение повторяющихся строк

Запрос с UNION автоматически удаляет все повторяющиеся строки из набора результатов запроса (другими словами, ведет себя как предложение WHERE с несколькими условиями в одном операторе SELECT). Таково поведение оператора UNION по умолчанию, но при желании мы можем изменить это. Для этого нам следует использовать оператор UNION ALL вместо UNION.

3. Сортировка результатов комбинированных запросов

Результаты выполнения оператора SELECT сортируются с помощью предложения ORDER BY. При комбинировании запросов с помощью UNION только одно предложение ORDER BY может быть использовано, и оно должно быть проставлено в последнем операторе SELECT. Действительно, на практике нет особого содержания часть результатов сортировать в одном порядке, а другую часть – в другом. Поэтому несколько предложений ORDER BY применять не разрешается.

  • Изменение регистра букв в тексте
  • Сумма прописью на украинском языке
  • Поиск латиницы в кириллице и наоборот
  • Транслитерация с украинского на английский

Bablosoft

Как в SQL сделать сразу несколько запросов в одном действии

Запланировано Прикреплена Закрыта Перенесена Поддержка
64 Сообщения 6 Posters 799 Просмотры
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
ответил Bigma в отредактировано

Щас глянуть не могу, что он возвращает в ответ, но можно писать ведь не 1 а номер потока к примеру, или рендом. И по этому числу искать запись. Проверю завтра.

Да многое можно, а потом посмотреть на свой код и понять, что ты сделал функционал SELECT FOR UPDATE .
P.S.
У меня была такая история.

�� Supercharge BAS with Python ��
Python, JavaScript, Golang, BAS, Linux, PostgreSQL | Only Long-term Remote Partnerships

ответил sergerdn в отредактировано
@sergerdn Как ты уже написал, она лочит всю таблицу, имей это ввиду.
ответил Bigma в отредактировано

@sergerdn Как ты уже написал, она лочит всю таблицу, имей это ввиду.

Я же сам это написал, конечно я имею в виду. И так же добавил, что эта информация может быть устаревшая и надо ее проверять. Может у современных реализаций INNODB немного не так. Может лочится только одна запись в таблице на чтение. Чтобы другой поток не захватил ее.
Под капотом БД многое что делается, другое дело, что ты не знаешь об этом и «спишь спокойно».

�� Supercharge BAS with Python ��
Python, JavaScript, Golang, BAS, Linux, PostgreSQL | Only Long-term Remote Partnerships

написал в отредактировано

Друзья, вопрос же не в частном случае. В справке написано что можно несколько строк, вот мой вопрос и сводится к тому — как сделать чтобы в кубике работало несколько строк. А вы в какие то дербри полезли

ответил Shogo в отредактировано GhostZ

@Shogo, многострочный запрос и несколько запросов в одном, это не одно и тоже, модуль поддерживает многострочные запросы, но не поддерживает несколько запросов в одном, так как либо они не поддерживаются в конкретном диалекте или отключены по умолчанию. Например в MySQL и MariaDB, несколько запросов в одном отключены по умолчанию, а чтобы их включить нужно добавить multipleStatements: true в настройки диалекта.

ответил GhostZ в отредактировано
@GhostZ а где у нас настройки диалекта? А то ни разу с этим не сталкивался
ответил Shogo в отредактировано
@Shogo, нигде, их можно изменить только отредактировав код модуля
ответил GhostZ в отредактировано
@GhostZ а где можно отредактировать код модуля? )
ответил Shogo в отредактировано
@Shogo Если, нет понимания, где редактировать, то может и не стоит !?
ответил inotoxic в отредактировано
@inotoxic ну там пачка файлов, если мне сказать в каком файле и в каком месте — то в чём проблема?

Как использовать SetResourceValue в веб-интерфейсе?

Запланировано Прикреплена Закрыта Перенесена Поддержка
11 Сообщения
69 Просмотры

@Fox я 20 раз уже перечитал ваши сообщения, и хоть убей, не могу понять где у меня ошибка. Я понимаю, что мы экспортировали модуль, в котором обозначаются SetValue и GetValue. В самом коде создали функции SetResourceValue и GetResourceValue, в которых и используются SetValue и GetValue. Я так же понимаю, что при каждом запуске, функция SetResourceValue выполняется автоматически, для каждого ресурса. Но мне не нужно назначать ресурс при первоначальном запуске веб-интерфейса. Мне нужно назначать дальше, перед нажатием на кнопку старт. Я же вызываю функцию явно, по нажатии на кнопку старта. Значение ресурса должно меняться, всё же как по документации. Функция вызывается, значение не пустое, ресурс верный. Но почему он во всех случаях пустой? Может await нужны для этих действий?

Я сказал выше, прикладывайте экспортированный интерфейс (можно в личку если там всё так секретно), и я вам отвечу предметно. Или обращайтесь в премиум поддержку, правда там попросят тоже самое и вопрос перенаправят скорее всего тоже мне 😀

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *