我有一个查询问题,我之前用2个表和不同的数据库结构解决了,现在我有3个表,我无法得到正确的结果
leads table - regular leads table with id, firstname, etc...
statuses table - id, lead_id, brand_id, map_id
lead_id is relationship key for id in lead
map_id is relationship key for map_keys table
map_keys table - id, name, rank
规则: 每个潜在客户可以拥有多个状态,也可以没有状态
即使同一个潜在客户有两种或更多种状态,查询也应仅打印最低状态
示例:
lead: id = 3,
statuses: id = 7, lead_id = 3, map_id = 5
and another record:
statuses: id = 10, lead_id = 3, map_id = 1
map_keys:
id = 5, rank = 5
id = 1, rank = 1
in the result I should get
lead_id = 3, map_id = 1
过去我在状态表中排名,所以我的解决方案是
SELECT IF(s2.rank IS NULL, s.rank, s2.rank) AS rank FROM `leads` l
LEFT JOIN statuses s ON s.lead_id = l.id
LEFT JOIN statuses s2 ON s2.lead_id = s.lead_id AND s.rank > s2.rank
GROUP BY l.id
但是使用新的数据库结构我无法得到正确的结果,我希望我的问题是可以理解的,如果不是,我会尽力解释它,谢谢!
答案 0 :(得分:0)
我解决了我的问题,我的最终查询是
SELECT * FROM leads
LEFT JOIN (
SELECT lead_id, mk.name, mk.rank FROM `statuses` s
JOIN map_keys mk ON mk.id = s.map_id
JOIN statuses_maps sm ON sm.id = s.status_id
ORDER BY rank ASC ) as s ON lead_id = lead.id
GROUP BY leads.id