У меня есть 3 таблицы, которые содержат очень похожую информацию. Столами являются владельцы, менеджеры и сотрудники. Я пытаюсь извлечь информацию из всех трех таблиц, все еще понимая, из какой таблицы берутся записи. Я тоже не хочу дубликатов. Во всех таблицах есть адрес электронной почты, который относится к таблице email
, к которой я присоединяюсь.MySQL: выберите из нескольких таблиц с полем, чтобы показать, в какой таблице была сделана запись.
Кроме того, очень вероятно, что email_id будет существовать в нескольких таблицах (т. Е. Электронное письмо может быть владельцем и менеджером, или все равно 3).
Вот то, что я до сих пор:
SELECT email
FROM (
(
SELECT e.email
FROM `owners` as o
LEFT JOIN `email` as e
ON e.email_id = o.email_id
WHERE o.company_id = 3
GROUP BY e.email
)
UNION ALL
(
SELECT e.email
FROM `managers` as m
LEFT JOIN `email` as e
ON e.email_id = m.email_id
WHERE m.company_id = 3
GROUP BY e.email
)
UNION ALL
(
SELECT e.email
FROM `employees` as emp
LEFT JOIN `email` as e
ON e.email_id = emp.email_id
WHERE v.company_id = 3
GROUP BY e.email
)
) as `people`
ORDER BY email ASC
Этот запрос на самом деле работает отлично. Он удаляет дубликаты из таблиц отдельно, но сохраняет их в нескольких таблицах. Я до сих пор не знаю, из какой таблицы каждый из них. Я попытался изменить запрос к этому вопросу:
SELECT email, owner, manager, employee
FROM (
(
SELECT e.email, 'yes' as owner
FROM `owners` as o
LEFT JOIN `email` as e
ON e.email_id = o.email_id
WHERE o.company_id = 3
GROUP BY e.email
)
UNION ALL
(
SELECT e.email, 'yes' as manager
FROM `managers` as m
LEFT JOIN `email` as e
ON e.email_id = m.email_id
WHERE m.company_id = 3
GROUP BY e.email
)
UNION ALL
(
SELECT e.email, 'yes' as employee
FROM `employees` as emp
LEFT JOIN `email` as e
ON e.email_id = emp.email_id
WHERE v.company_id = 3
GROUP BY e.email
)
) as `people`
ORDER BY email ASC
Это не сработало, потому что не все таблицы имели одинаковые столбцы. Если я добавлю все поля ко всем таблицам (т. Е. SELECT e.email, 'yes' as owner, '' as manager, '' as employee
), запрос работает, но все таблицы имеют одинаковое поле. Не знаю, почему.
В конечном счете, я бы хотел, чтобы в возвращаемом наборе записей не было повторяющихся адресов электронной почты, и у каждой записи есть что-то вроде email = 'email address', owner = 'yes/no', manager = 'yes/no', employee = 'yes/no'
.
Любые идеи о том, как это сделать? Если вам нужна дополнительная информация, просто прокомментируйте. Благодаря!
В качестве альтернативы добавить 3 колонки к каждому блоку результатов. т. е. добавить * is_owner, is_manager, is_employee * to * all * 3 select blocks – vogomatix
И вы даже можете удалить круглые скобки! –
Я действительно попытался добавить 3 столбца к каждому блоку результатов, и он работает некорректно. Можете ли вы показать пример этого? – Chris