zoukankan      html  css  js  c++  java
  • 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位数据,结果也是空的。

  • 相关阅读:
    MFC/HALCON混合编程系列三_CFielDialog打开文件对话框
    MFC/HALCON混合编程系列二_打开两幅图_MFC布局_
    MFC/HALCON混合编程系列一_相机打开图像_简单处理_
    MFC C++ Cstring与string互转
    ImageMagik——开发篇(转)
    二维码解码器Zbar+VS2010开发环境配置(使用opencv库)
    select @@Identity 返回自动递增字段的值
    WebStorm设置左侧菜单栏背景和字体设置
    Chrome插件推荐
    WebStorm常用快捷键
  • 原文地址:https://www.cnblogs.com/kongbailingluangan/p/15086143.html
Copyright © 2011-2022 走看看