Как я могу объединить две таблицы с разными данными и установить значение для 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
Этот вопрос уже решен. Я разместил этот новый вопрос, так как добавил некоторые данные о T2, которые не имеют отношения к T1. Я не хочу редактировать предыдущий вопрос, так как он уже решен
Вы так и не объяснили требуемую логику.
@Squirrel Я использую полное внешнее соединение, но поскольку компания C и компания D не имеют отношения друг к другу, оно станет нулевым.
@ДейлК 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
Простейшей логикой было бы разделить его на маленькие логики, а затем использовать 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 John
CompanyB Business John
CompanyZ Nurse John
@Jboy Я обновил ответ. Пожалуйста, проверьте сейчас
Вы можете сделать 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
Спасибо. Это сработало на моем, но у меня есть последний вопрос в продолжение этого. Выложу новый.
Отвечает ли это на ваш вопрос? Объедините две таблицы с разными столбцами и данными