powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединить два запроса в один
3 сообщений из 3, страница 1 из 1
Объединить два запроса в один
    #39747948
hatter11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, подскажите пожалуйста, можно ли объединить два запроса для получения пересечения их результатов?
Вот мой первый запрос, он выдаёт список отказных подписчиков в прошлом году:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select u.id,eb.caption AS "brands_name",t.start_at,t.end_at FROM users u
LEFT JOIN transactions t
 ON u.id=t.user_id
 LEFT JOIN leads_relations lr
 ON u.id=lr.user_id
 LEFT JOIN leads l
 ON lr.lead_id=l.id
 LEFT JOIN editions e
    ON e.id = t.resource_id
  LEFT JOIN transactions_invoice ti
   ON ti.transaction_id = t.id
  LEFT JOIN editions_universal eu
   ON eu.id = ti.journal_id 
 LEFT JOIN complects_for_universal AS cm
   ON cm.id = t.resource_id
 lEFT JOIN editions_brands AS eb
   ON eb.id =e.brand_id
WHERE t.content_type_id IN(1)
AND t.status_id = 2 AND t.sum<>0
    AND t.end_at>='2017-01-01' AND t.end_at<'2018-01-01'
    AND NOT EXISTS (SELECT id FROM transactions t1 WHERE t1.user_id = u.id AND t1.status_id = 2 AND t1.end_at >= '2018-01-01' AND t1.content_type_id IN (1))
   AND u.id=t.user_id
AND t.resource_id IN(7,16,22,23,24,28,29,30,31,37,39,40)


и второй запрос, который выводит подписчиков текущего года:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT u.id,eb.caption AS "brands_name",t.start_at,t.end_at FROM users u
  LEFT JOIN transactions t
  ON u.id=t.user_id
   LEFT JOIN leads_relations lr
  ON u.id=lr.user_id
  LEFT JOIN leads l
  ON lr.lead_id=l.id
  LEFT JOIN editions e
    ON e.id = t.resource_id
   LEFT JOIN transactions_invoice ti
    ON ti.transaction_id = t.id
   LEFT JOIN editions_universal eu
    ON eu.id = ti.journal_id
  LEFT JOIN complects_for_universal AS cm
    ON cm.id = t.resource_id
  lEFT JOIN editions_brands AS eb
    ON eb.id =e.brand_id
    WHERE t.end_at>=NOW() AND t.start_at<NOW()
    AND t.resource_id IN(7,16,22,23,24,28,29,30,31,37,39,40)
 AND t.content_type_id in(1) AND t.status_id IN(2) AND t.sum<>0


а мне нужно построить запрос так,чтобы он выдавал подписчиков прошлого года, которые есть в текущем году. Есть ли возможность сделать это одним запросом?
...
Рейтинг: 0 / 0
Объединить два запроса в один
    #39747953
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть два запроса, то получить общие для них записи можно так:
Код: sql
1.
2.
3.
4.
SELECT t1.*
FROM (первый запрос) AS t1,
     (второй запрос) AS t2
WHERE t1.id = t2.id;



Если секции SELECT и FROM у них полностью идентичны (вроде бы так), то достаточно объединить секции WHERE:

Код: sql
1.
2.
3.
4.
SELECT ...
FROM ...
WHERE (условия запроса 1)
  AND (условия запроса 2);



Ну а дальше просто развернуть выражение во WHERE в соответствии с правилами логики, удалить дубли, объединить что можно, и т.п.

Заодно просмотрите внимательно запросы - уж больно там дофига ненужных таблиц. Да и не все связи должны быть LEFT, минимум часть - INNER. Во всяком случае вырожденные - обязательно изменить.
...
Рейтинг: 0 / 0
Объединить два запроса в один
    #39747956
hatter11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, сейчас попробую сделать
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объединить два запроса в один
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]