非常によく似た情報を含む 3 つのテーブルがあります。テーブルは、所有者、管理者、および従業員です。各レコードがどのテーブルから来たのかを理解しながら、3 つのテーブルすべてから情報を取得しようとしています。私も重複したくありません。すべてのテーブルには、参加しているテーブルに関連する email_id がありemail
ます。
また、email_id が複数のテーブルに存在する可能性が非常に高くなります (つまり、1 つの電子メールが所有者と管理者、または 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'
。
これを達成する方法についてのアイデアはありますか? さらに情報が必要な場合は、コメントしてください。ありがとう!