Mysql-从左连接获取多个最后结果
我为我的英语感到抱歉 我有三张桌子。联系人,联系人属性,联系人值 联系人:Mysql-从左连接获取多个最后结果,mysql,left-join,Mysql,Left Join,我为我的英语感到抱歉 我有三张桌子。联系人,联系人属性,联系人值 联系人: ------------------- |id | name | ------------------- |1 | bob | |2 | boby | 联系地址: ------------------- |id | code | ------------------- |1 | email | |2 | sex | 联系单位价值: ---
-------------------
|id | name |
-------------------
|1 | bob |
|2 | boby |
联系地址:
-------------------
|id | code |
-------------------
|1 | email |
|2 | sex |
联系单位价值:
------------------------------------------------------------------------
|id | contact_id | attribute_id | creation | value
------------------------------------------------------------------------
|1 | 1 | 1 | 2014-07-17 12:12:49 | bob@bob.com
|2 | 1 | 2 | 2014-07-17 12:12:56 | Male
|3 | 1 | 2 | 2014-07-17 14:15:58 | Female
现在,我正在寻找一个查询,用于从一个联系人获取所有唯一属性,但最后一个唯一属性除外。查找我的结果查询的方法如下所示:
------------------------------------------
|name |contact_id | attribut_id | value
------------------------------------------
|Bob |1 | 1 | bob@bob.com
|Bob |1 | 2 | female
我尝试了以下查询:
SELECT * FROM contact AS c
LEFT JOIN contact_value as v ON c.id = v.contact_id
WHERE c.id = '1'
AND v.creation IN
(SELECT MAX(v2.creation) FROM contact_value AS v2 GROUP BY v2.attribute_id)
但结果是:
------------------------------------------
|name |contact_id | attribut_id | value
------------------------------------------
|Bob |1 | 1 | bob@bob.com
|Bob |1 | 2 | male
|Bob |1 | 2 | female
如果有人知道一个简单的方法来得到我想要的结果?
我简化了表格,使之更具可读性。
感谢您的时间,再次为这糟糕的英语感到抱歉。您可以对子查询执行联接,该子查询将检索最大创建值以及按联系人id和属性id分组的其他值 诸如此类
select c.name, cv.contact_id, cv.attribute_id, cv.value
from contact c
join contact_value cv on cv.contact_id = c.id
join
(select max(creation) as maxCreation, contact_id, attribute_id
from contact_value
group by contact_id, attribute_id) s
on cv.contact_id = s.contact_id and
cv.attribute_id = s.attribute_id and
cv.creation = s.maxCreation
请参见您也可以在子查询中使用ORDER BY和LIMIT 1:
SELECT c.*,
(
SELECT v.value
FROM contact_value AS v
WHERE v.contact_id = c.id
ORDER BY v.creation
LIMIT 1
) AS latest_value
FROM contact AS c
WHERE c.id = '1'
为什么您要将1的_id设置为女性和男性?只是好奇。