今天有個需求,是通過兩張表進行查詢。一對多的關系。通過一個主鍵,取出其中的一條。
開始以為還好,直接用用了left join on進行查詢。卻發現了問題所在。
其他的好弄。
開始的寫法借鑒這篇博客:
https://bbs.csdn.net/topics/350134616?tdsourcetag=s_pcqq_aiomsg
沒能解決問題,因為取出的數據中不是我想要的最新的,而是最小的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;
參照的是這篇博客:
https://blog.csdn.net/u012660464/article/details/78605078?tdsourcetag=s_pcqq_aiomsg
很郁悶的是,他的博客,他最后取出了最大的值,而我卻依舊沒有最大值。因為這篇博客的原理就是因為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_revisit
GROUP BY CONSULTATION_ID )
博客源於:
https://blog.csdn.net/hd243608836/article/details/80088173
接下來就可以很簡單的完成剩下的部分了:
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`