Mysql內置函數GROUP_CONCAT()返回值的類型


一、簡述

  記錄在使用GROUP_CONCAT()函數的過程中所遇到的奇怪現象。

二、內容

  建立stu_user與stu_log兩張數據表,數據如下:

  stu_user

  stu_log(order為自增列,不完全是數字,有可能用日期時間來代替)

  現在想查詢張三、李四、王五最新一條的操作日志內容,利用GROUP_CONCAT()這個函數把最新一條的id先找出來。

SELECT GROUP_CONCAT(id ORDER BY `order` DESC) FROM stu_log GROUP BY p_id

  得出:

  再用IN查詢SQL語句:

SELECT * FROM stu_log WHERE id IN(
    SELECT GROUP_CONCAT(id ORDER BY `order` DESC) FROM stu_log GROUP BY p_id)

  這時奇怪的現象出來,查詢結果是空的。

  理論上在IN查詢中,id:abcid008(王五的操作日志內容1)這條數據應該是能查詢到的。

  把SUBSTRING_INDEX()函數加上,SQL語句:

SELECT * FROM stu_log where id in (
    SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY `order` DESC),',',1) FROM stu_log GROUP BY p_id)

  得出:

  數據正常,符合想象中的結果。這就說明GROUP_CONCAT()函數的返回值有些離奇。

  證明一:

SELECT * FROM stu_log where id in (
    SELECT CAST(GROUP_CONCAT(id ORDER BY `order` DESC) AS CHAR) FROM stu_log GROUP BY p_id)

  數據正常。

  證明二:

  stu_log表的id去表英文字母abcid。

  得出:

  執行原來的sql語句:

SELECT * FROM stu_log WHERE id IN(
    SELECT GROUP_CONCAT(id ORDER BY `order` DESC) FROM stu_log GROUP BY p_id)

  數據正常。

  證明三:

  stu_log表的id用英文字母代替(aaa/bbb/ccc/ddd/eee)。

  數據正常。

  但是,當id的英文字母增加到4位數據時,結果就為空了。

  查詢結果:

  把id換成數字,但長度超過4位數據,結果也是空的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM