MySql 新列中的多个关系
MySql multiple relations in new column
我有多个 table 有许多不同线索的联系信息。有一个 table 包含 ID 和名称列表“leads
”,一个 table 包含 ID 和 phone 数字列表“phones
”,以及将两者联系在一起的 table 'lead_phones
'。有些联系人有一个人的多个 phone 号码。当我 运行 一个看起来像这样的查询时:
SELECT l.created,
l.id,
l.first_name,
l.last_name,
ph.number phone1,
#IF(COUNT(ph.number) > 1, *second phone*, null) AS phone2,
e.email email
FROM leads l
LEFT JOIN lead_phones lp ON lp.lead_id = l.id
LEFT JOIN phones ph on ph.id = lp.phone_id
LEFT JOIN lead_emails le ON le.lead_id = l.id
LEFT JOIN emails e on e.id = le.email_id
ORDER BY l.created DESC;
我得到一个 table 看起来像这样
created id first_name last_name phone email
2016-03-22 15:53:01 45620 Jimmy Dean 5551234567 jdean@something.com
2016-03-22 15:53:00 45619 John Smith 5554561234 smith@somethingelse.com
2016-03-22 15:51:54 45618 Betty Boo 5552582585 betty@betty.com
2016-03-22 15:50:02 45617 Betty Boo 5551478965 betty@betty.com
我真正想做的是能够将 Betty Boo 与 phone 1 和 phone 2 放在同一行。我查询中的注释行是试图得到我想要的我只是不知道如何完成它。
谢谢
您正在尝试 pivot
您的结果。有点不清楚应该返回哪个 id
字段(预期结果会有所帮助),但假设每个潜在客户最多只能有 2 phone 个数字,那么这是一个使用 min
的选项和 max
:
SELECT max(l.created) created,
max(l.id) id,
l.first_name,
l.last_name,
min(ph.number) phone1,
max(ph.number) phone2,
e.email email
FROM leads l
LEFT JOIN lead_phones lp ON lp.lead_id = l.id
LEFT JOIN phones ph on ph.id = lp.phone_id
LEFT JOIN lead_emails le ON le.lead_id = l.id
LEFT JOIN emails e on e.id = le.email_id
GROUP BY l.first_name, l.last_name, e.email
我有多个 table 有许多不同线索的联系信息。有一个 table 包含 ID 和名称列表“leads
”,一个 table 包含 ID 和 phone 数字列表“phones
”,以及将两者联系在一起的 table 'lead_phones
'。有些联系人有一个人的多个 phone 号码。当我 运行 一个看起来像这样的查询时:
SELECT l.created,
l.id,
l.first_name,
l.last_name,
ph.number phone1,
#IF(COUNT(ph.number) > 1, *second phone*, null) AS phone2,
e.email email
FROM leads l
LEFT JOIN lead_phones lp ON lp.lead_id = l.id
LEFT JOIN phones ph on ph.id = lp.phone_id
LEFT JOIN lead_emails le ON le.lead_id = l.id
LEFT JOIN emails e on e.id = le.email_id
ORDER BY l.created DESC;
我得到一个 table 看起来像这样
created id first_name last_name phone email
2016-03-22 15:53:01 45620 Jimmy Dean 5551234567 jdean@something.com
2016-03-22 15:53:00 45619 John Smith 5554561234 smith@somethingelse.com
2016-03-22 15:51:54 45618 Betty Boo 5552582585 betty@betty.com
2016-03-22 15:50:02 45617 Betty Boo 5551478965 betty@betty.com
我真正想做的是能够将 Betty Boo 与 phone 1 和 phone 2 放在同一行。我查询中的注释行是试图得到我想要的我只是不知道如何完成它。
谢谢
您正在尝试 pivot
您的结果。有点不清楚应该返回哪个 id
字段(预期结果会有所帮助),但假设每个潜在客户最多只能有 2 phone 个数字,那么这是一个使用 min
的选项和 max
:
SELECT max(l.created) created,
max(l.id) id,
l.first_name,
l.last_name,
min(ph.number) phone1,
max(ph.number) phone2,
e.email email
FROM leads l
LEFT JOIN lead_phones lp ON lp.lead_id = l.id
LEFT JOIN phones ph on ph.id = lp.phone_id
LEFT JOIN lead_emails le ON le.lead_id = l.id
LEFT JOIN emails e on e.id = le.email_id
GROUP BY l.first_name, l.last_name, e.email