mysql左连接多条取⼀条_MySQL的左连接查询,只取出最⼤
的⼀条数据
今天有个需求,是通过两张表进⾏查询。⼀对多的关系。通过⼀个主键,取出其中的⼀条。
开始以为还好,直接⽤⽤了left join on进⾏查询。却发现了问题所在。
其他的好弄。
开始的写法借鉴这篇博客:
没能解决问题,因为取出的数据中不是我想要的最新的,⽽是最⼩的ID的那个。
为什么会这样呢,了解了才知道,说是group by 分组取出的是按照最⼩的取出的,我也很绝望!
接下来参照了这个SQL:
SELECT ID,USER_ID,problems,last_updated_date FROM (select * from t_iov_help_feedback order by USER_ID,
LAST_UPDATED_DATE DESC) b
GROUP BY b.USER_ID;
参照的是这篇博客:
很郁闷的是,他的博客,他最后取出了最⼤的值,⽽我却依旧没有最⼤值。因为这篇博客的原理就是因为group by取出的是最⼩的,所以它就先按照ID查出最⼤的。很显然,⼜失败了
这个时候,已经弄了⼀下午,快下班了。
于是⼜继续看⽹上的⼀些博客。
到了最原始的写法,于是按照最原始的写法:
语法格式是:
SELECT * FROM TABLE WHERE ID IN (SELECT MAX(ID) FROM TABLE GROUP BY [去除重复的字段名列表,....])
1
参照这个格式,去重的写法。进⾏分组。
最终,达到了我想要的结果。
SELECT
REVISIT_ID,
CONSULTATION_ID,
RESULT_NAME,
REVISIT_TIME
FROM
tb_cloud_consultation_revisit
WHERE REVISIT_ID IN
(SELECT
MAX(REVISIT_ID)
FROM
tb_cloud_consultation_revisitsql left join 多表连接
GROUP BY CONSULTATION_ID )
博客源于:
接下来就可以很简单的完成剩下的部分了:
SELECT
a.`CONSULTATION_ID` AS consultationId,
a.CONSULTATION_NAME AS consultationName, a.CONSULTATION_PHONE AS consultationPhone, a.CONSULTATION_DATE AS consultationDate,
a.MODE_NAME AS modeName,
a.`CHANNEL_NAME` AS channelName,
a.INTENTION_NAME AS intentionName,
a.REASON_NAME AS reasonName,
a.`PENSION_CARD` AS pensionCard,
a.REMARK AS remark,
a.PENSION_NAME AS pensionName,
a.ABILITY_NAME AS abilityName,
b.RESULT_NAME AS resultName
FROM
tb_cloud_consultation a
LEFT JOIN
(SELECT
REVISIT_ID,
CONSULTATION_ID,
RESULT_NAME,
REVISIT_TIME
FROM
tb_cloud_consultation_revisit
WHERE REVISIT_ID IN
(SELECT
MAX(REVISIT_ID)
FROM
tb_cloud_consultation_revisit
GROUP BY CONSULTATION_ID )
)
b
ON b.`CONSULTATION_ID` = a.`CONSULTATION_ID`