У меня есть 3 таблицы (выделены зеленым цветом), и я хочу объединить ВСЕ, РУКОВОДИТЕЛИ и КОНТАКТЫ, в каждой из которых нет 1 столбца (выделено красным). Также JOIN, таблица CONTACTS с ACCOUNTS, чтобы получить 3 поля (поэтому красным цветом выделенное поле "code_uk" будет другим столбцом, отсутствующим в LEADS после JOINING. Остальные столбцы Я хочу разместить один под другим (UNION ALL), как указано в запросе.
Требуется вывод:
- UNION ALL, LEADS и CONTACTS путем размещения столбцов, как это сделано в запросе ниже - DONE
- Строки из CONTACTS где contact_email / contact_product отсутствует в LEADS, т. е. желтые выделенные строки 9,11,14 не должны присутствовать. - DONE
- Использовать STRUCT, поскольку в LEADS & # существует несоответствие в количестве столбцов & КОНТАКТЫ - ВЫПОЛНЕНО
Не должно присутствовать только уникальное «lead_email», то есть строки 2 и 5, выделенные синим цветом, из LEADS. Когда я использую отличное (lead_email), ошибка имеет тип STRUCT не может использоваться в SELECT DISTINCT
- Когда я удаляю «Different» только для проверки правильности работы STRUCT, выводится 15 строк, но я хочу 13 строк (кроме uding 2 & 5).
- Пробовал "group by", но он также не работает
Может кто-нибудь помочь помочь исправить (4)? См. Изображение
Используемый запрос:
SELECT distinct(lead_email), lead_id, lead_product, struct<lead_reason string> (lead_reason) /*lead_reason*/, lead_date, lead_employee_count, lead_code,
struct<contact_cancel_date timestamp> (null) contact_cancel_date,/*null as contact_cancel_date*/ /*null as code_uk*/ struct<code_uk string> (null) code_uk FROM `sample_leads`
union all
select contact_email,contact_id, contact_product, struct<lead_reason string> (null) contact_reason, contact_date, employee,code_us,struct<contact_cancel_date timestamp> (contact_cancel_date),struct<code_uk string> (code_uk) from `sample_contacts`
left join
(
select account_id, employee, code_us, code_uk from `sample_accounts`)
on contact_id=account_id
where `sample_contacts`.contact_email NOT IN (SELECT lead_email FROM `sample_leads`)
OR `sample_contacts`.contact_product NOT IN (SELECT lead_product FROM `sample_leads`)
-- group by 1,2,3,5,6,7,8,9
-- order by lead_id
Примечание: столбцы «id» и «employee» являются целыми числами, «date» является меткой времени, остальные столбцы являются строка.
Ссылки:
lead_id lead_email lead_product lead_reason lead_date lead_employee_count lead_code
1 abc@abc.com msoffice abc 2020-02-23 07:30:02 UTC 1000 1005-C
2 pqr1@pqr1.com chrome pqr1 2020-02-23 07:30:02 UTC 2000 2006-B
3 xyz@xyz.com iphone xyz 2020-02-23 07:30:02 UTC 3000 3007-A
4 zzz@zzz.com macbook zzz 2020-02-23 07:30:02 UTC 4000 4008-B
5 xyz1@xyz.com itunes xyz1 2020-02-23 07:30:02 UTC 5000 5001-A
6 google@google.com googlecloud xyz2 2020-02-23 07:30:02 UTC 6000 6002-B
7 123@123.com yahoomail junk 2020-02-23 07:30:02 UTC 7000 7003-A
8 abc1@gmail.com 2020-02-23 07:30:02 UTC 8000 8004-B
2 pqr1@pqr1.com chrome pqr1 2020-02-23 07:30:02 UTC 2000 2006-B
5 xyz1@xyz.com itunes xyz1 2020-02-23 07:30:02 UTC 5000 5001-A
Контакты:
contact_id contact_email contact_product contact_date contact_cancel_date
9 msoffice 2010-01-23 07:30:01 UTC 2020-02-23
07:30:02 UTC
10 pqr@pqr.com playstore 2010-01-23 07:30:01 UTC 2020-02-23 07:30:02 UTC
11 123@123.com 2010-01-23 07:30:01 UTC 2020-02-23 07:30:02 UTC
12 abc1@abc1.com 2010-01-23 07:30:01 UTC 2020-02-23 07:30:02 UTC
13 itunes@apple.com ipod 2010-01-23 07:30:01 UTC 2020-02-23 07:30:02 UTC
14 googlecloud 2010-01-23 07:30:01 UTC 2020-02-23 07:30:02 UTC
15 yahoo@yahoo.com 2010-01-23 07:30:01 UTC 2020-02-23 07:30:02 UTC
16 456@gmail.com 2010-01-23 07:30:01 UTC 2020-02-23 07:30:02 UTC
Счета:
account_id employee code_us code_uk
9 100 001-A 450-a
10 200 002-B 451-a
11 300 003-A 452-a
12 400 004-B 453-a
13 500 005-C 454-a
14 600 006-B 455-a
15 700 007-A 456-a
16 800 008-B 457-a