Объедините 2 таблицы с разными данными в каждой

Как я могу объединить две таблицы с разными данными и установить значение для CompanyC для всех данных в таблице 2, а CompanyD не имеет отношения к таблице 1. Я хочу, чтобы Company C установил все данные в таблице 2.

   T1:                                 T2:

company     jobs                        emp_id  company     jobs     emp_name
-----------------------------------      -------------------------------------
CompanyA     IT                          1      CompanyA     IT        John
CompanyB     Business                    2      CompanyB     Business  Mike
CompanyC     Engineer                    3      CompanyD     Nurse     Mitch

И таблица результатов будет выглядеть так:

emp_id     company      jobs            emp_name           
----------------------------------------------     
1          CompanyA     IT                John     
1          CompanyC     Engineer          John  
2          CompanyB     Business          Mike      
2          CompanyC     Engineer          Mike
3          CompanyD     Nurse             Mitch
3          CompanyC     Engineer          Mitch

Это то, что я пробовал

 SELECT  t2.emp_id, coalesce(t1.company_name, t2.company_name) AS company_name, 
    coalesce(t1.jobs, t2.jobs) AS jobs, 
    t2.emp_name, 
FROM Table1 t1  
    FULL OUTER JOIN      
    Table2 t2 ON t2.company = t1.company AND t2.jobs = t1.jobs

Отвечает ли это на ваш вопрос? Объедините две таблицы с разными столбцами и данными

philipxy 10.12.2020 08:43

Этот вопрос уже решен. Я разместил этот новый вопрос, так как добавил некоторые данные о T2, которые не имеют отношения к T1. Я не хочу редактировать предыдущий вопрос, так как он уже решен

JBA 10.12.2020 08:44

Вы так и не объяснили требуемую логику.

Squirrel 10.12.2020 08:55

@Squirrel Я использую полное внешнее соединение, но поскольку компания C и компания D не имеют отношения друг к другу, оно станет нулевым.

JBA 10.12.2020 09:07

@ДейлК SELECT t2.emp_id, coalesce(t1.company_name, t2.company_name) AS company_name, coalesce(t1.jobs, t2.jobs) AS jobs, t2.emp_name, FROM Table1 t1 FULL OUTER JOIN Table2 t2 ON t2.company = t1.company AND t2.jobs = t1.jobs

JBA 10.12.2020 11:19
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Простейшей логикой было бы разделить его на маленькие логики, а затем использовать union следующим образом:

Select t2.*
  From t1 join t2 on t1.company = t2.comapny and t1.jobs = t2.jobs
Union
Select t1.company, T2.jobs, T2.emp_name
  From t1 cross join t2
Where not exists (select 1 from t2 t22
                   Where t1.company = t22.comapny and t1.jobs = t22.jobs)
Union 
Select t2.* 
  From t2 where not exists ( select 1 from t1 
                              where t1.company = t2.comapny and t1.jobs = t2.jobs)

Это показывает только company jobs emp_name-------------------------------------------------- ` ` CompanyA IT JohnCompanyB Business JohnCompanyZ Nurse John

JBA 10.12.2020 10:57

@Jboy Я обновил ответ. Пожалуйста, проверьте сейчас

Popeye 10.12.2020 11:01
Ответ принят как подходящий

Вы можете сделать INNER JOIN таблиц для компаний, которые существуют в Table1, а затем UNION ALL для компаний из Table2, которых нет в Table1:

SELECT t2.emp_id, t1.company, t1.jobs, t2.emp_name
FROM Table1 t1 INNER JOIN Table2 t2
ON t2.company = t1.company
OR NOT EXISTS (SELECT 1 FROM Table2 WHERE company = t1.company)
UNION ALL
SELECT t2.*
FROM Table2 t2
WHERE NOT EXISTS (SELECT 1 FROM Table1 WHERE company = t2.company)

В вашем вопросе неясно, должны ли вы быть связаны 2 таблицы только на company или также на jobs, и в этом случае вы должны использовать этот запрос:

SELECT t2.emp_id, t1.company, t1.jobs, t2.emp_name
FROM Table1 t1 INNER JOIN Table2 t2
ON t2.company = t1.company  AND t2.jobs = t1.jobs
OR NOT EXISTS (SELECT 1 FROM Table2 WHERE company = t1.company AND jobs = t1.jobs)
UNION ALL
SELECT t2.*
FROM Table2 t2
WHERE NOT EXISTS (SELECT 1 FROM Table1 WHERE company = t2.company AND jobs = t2.jobs)

Смотрите демо.
Полученные результаты:

emp_id | company  | jobs     | emp_name
-----: | :------- | :------- | :-------
     1 | CompanyA | IT       | John    
     1 | CompanyC | Engineer | John    
     2 | CompanyB | Business | Mike    
     2 | CompanyC | Engineer | Mike    
     3 | CompanyC | Engineer | Mitch   
     3 | CompanyD | Nurse    | Mitch  

Спасибо. Это сработало на моем, но у меня есть последний вопрос в продолжение этого. Выложу новый.

JBA 11.12.2020 04:00
stackoverflow.com/questions/65248274/… это моя последняя проблема
JBA 11.12.2020 09:58

Другие вопросы по теме