我有3个表,其中包含非常相似的信息。这些表格是业主,经理和员工。我试图从所有3张表中提取信息,同时仍然了解每条记录来自哪个表。我也不想重复。所有表格都有一个email_id,它与我加入的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 *到*全部* 3选择块 – vogomatix
您甚至可以删除括号! –
我实际上已经尝试为每个结果块添加3列,并且它不能正常工作。你能举一个这样的例子吗? – Chris