Я хочу уникальный запрос с двумя столбцами из разных таблиц

#sql #postgresql

#sql #postgresql

Вопрос:

Я хочу запрос, который показывает дату собрания и имя активных участников. В каждой строке отображаются даты собрания и активные участники. они из разных таблиц.В таблице meeting хранятся только участники, которые посещают собрание. Первый запрос похож на (собрание таблиц):

 Select m.date_meet as meeting date from meeting  m where m.date_meet between 
'1-1-2020' and '10-09-2020' 
 

а другой выбор (участники таблицы) :

 select p.participants_name as participant name from participants p where p.start <
'some_unique_Date' and p.end > 'some_unique_date'
 

Другой пример :

представьте, что результатом этого запроса является 4 строки select m.date_meet as meeting date from meeting m where m.date_meet between '1-1-2020' and '10-09-2020' , подобные :

дата встречи

  1. 1-20-2020
  2. 4-10-2020
  3. 7-20-2020
  4. 9-25-2020

Итак, для каждой строки передайте его для второго запроса :

 select p.participants_name from participants p where p.start < 
 

‘some_unique_Date’ и p.end> ‘some_unique_date’

это означает:

     select p.participants_name as participant name from participants p
 where p.start < '1-20-2020' and p.end > '1-20-2020'
    select p.participants_name as participants name from participants p 
where p.start < '4-10-2020' and p.end > '4-10-2020'
    select p.participants_name as participants name from participants p
 where p.start < '7-20-2020' and p.end > '7-20-2020'
    etc .. .
 

И результат, который я хочу, это что-то вроде :

 meeting date | Active Participants name 

 1. 1-20-2020   | john , Eduards, mike, Daniel, Maria
 2. 4-10-2020   | Eduards, mike, Daniel,Maria Ali
 3. 7-20-2020   | john , Eduards, mike, Maria, Ali, Joe, Carls
 4. 9-25-2020   | Mike, Maria, Louise, Anna, Cristopher, Elton 
 

у участников таблицы есть такие поля, как звезда, конец и имя. это означает начало активации участника, конец периода активации участника и имя.
В таблице собрания есть такие поля, как date_meeting , number_meeting, participants_meeting .

Комментарии:

1. Пожалуйста, предоставьте инструкции CREATE TABLE для 2 таблиц и некоторые примеры данных для них. Существует ли какая-либо связь между собранием и его участниками (кроме дат)? Собрание длится всего один день? Не могут ли 2 собрания перекрывать даты?

2. Я просто разрешаю этот запрос, я показываю вам пример.

Ответ №1:

Я просто разрешаю его, выполняя один запрос. в поле выбора я выполнил другой запрос.

     select   number_meet , date_meet , 
 meet_particip ,
array((select  unnest(string_to_array(string_agg(LOWER(dir.dir_diretor),','),',')) FROM srd_diretoria dir WHERE 
        dir.dir_start <   date_meet  ANd (dir.dir_end is null OR 
dir.dir_end  > red_date_meet) aND dir.dir_diretor is not null ) except select unnest
(( array_remove(regexp_split_to_array( srd_diretores_particip, '#'), '') )) )
        as " Ausentes "  from  meeting  
where date_meet > '1-1-2020' and date_meet < '31-12-2020' 
order by number_meet , date_meet
 

В этом запросе я помещаю все строки из dir_diretor в одну строку, используя функцию unnest() в сочетании с функцией string_to_array() . Я использовал исключение для сравнения двух подзапросов: один запрос — это активные участники, другой — подарки для собрания. это исключение вычитает эти два подзапроса.