Поиск элементов в списке и последующее отображение этих значений - PullRequest
0 голосов
/ 19 июня 2020

Предположим, у меня есть список адресов электронной почты,

'a@a.com', 'b@b.com', 'c@c.com'

Я хотел бы найти эти адреса электронной почты в таблице и затем отобразить их обратно в результатах, а затем также отобразить значения, которые НЕ были в таблице.

Мой текущий запрос выглядит следующим образом:

SELECT email, first_name, last_name
FROM user_table
WHERE email IN ('a@a.com', 'b@b.com'....)

Как мне заставить его отображать значения, которых также нет в таблице из того же списка? Я пробовал использовать CTE и тому подобное, и мне не очень повезло. TIA.

1 Ответ

1 голос
/ 19 июня 2020

Чтобы вывести список пользователей электронной почты из строки адресов, вы сначала собираетесь разделить их на отдельные записи. Затем, поскольку вы также хотите знать, каких в вашем списке нет в таблице, вы ВЛЕВО присоедините таблицу к полученным отдельным записям: (см. fiddle ).

with email_list (email) as 
     ( select unnest(string_to_array('&list_of_emails', ',')) )     
select el.email
     , coalesce(ut.first_name,'Not in User_Table') first_name
     , ut.last_name
  from email_list      el
  left join user_table ut 
    on ut.email = el.email; 

Настоящая работа выполняется в CTE emails_list. Функция string_to_array разделяет строки, разделенные запятыми, и создает массив строк. Затем функция unnest разбивает этот массив на отдельные строки. После этого основной запрос - это простая операция левого соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...