SELECT usertName,place from user WHERE placeId=123
上面这条sql语句的结果如下:  usertName place
宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣 水泊梁山----------------我想实现下面的结果,请问,该如何写select语句呢?placeId place usertName123 水泊梁山 宋江
123 水泊梁山 卢俊义
123 水泊梁山 吴用
123 水泊梁山 公孙胜
123 水泊梁山 关胜
123 水泊梁山 林冲
123 水泊梁山 秦明
123 水泊梁山 呼延灼
123 水泊梁山 花荣 

解决方案 »

  1.   

    SELECT place ,usertName from user WHERE placeId=123?
      

  2.   

      usertName place
    宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣 水泊梁山这个 要拆分usertName,以逗号为分隔符
      

  3.   

    姐给你写一个:
    create function t_split(@c varchar(2000),@split varchar(2))  
      returns @t table(col varchar(200))   
      as   
        begin   
          while(charindex(@split,@c)<>0)   
            begin   
               insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))  
                set @c = replace(@c,substring(@c,1,charindex(@split,@c))   
            end   
          insert @t(col) values (@c)   
            return   
         end
    end
      

  4.   

    建立临时表LSB1,字段ID,内容1-100000
    SELECT *,
    MID(MID(a1,id),2,LOCATE(',',MID(a1,id),2)-2) AS a3
     FROM (
    SELECT CONCAT(',','宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣',',') AS a1, '水泊梁山' AS a2) a3
    LEFT JOIN lsb1 b ON LENGTH(a1)>=b.id
    WHERE MID(a1,b.id,1)=',' AND MID(MID(a1,id),2,LOCATE(',',MID(a1,id),2)-2)<>' '将'宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣'、'水泊梁山'->你的字段名
      

  5.   

    可以用存储过程 (速度快效率高) 或者 辅助表1-10000连续数字+SQL语句 (实现简单) 来实现.建议是在应用程序的代码中直接解决,这样比较好.
    或者考虑你的表结构设计,placeId place usertName 这种格式比较规范,你现在的设计连数据库的第一范式都无法满足。
      

  6.   

    这位仁兄,你的select语句没有结果呀,出不来结果的。
      

  7.   

    我已经测试通过的,注意LSB1的字段及内容
      

  8.   

    mysql> select * from user;
    +----------------------------------------------------+----------+---------+
    | usertName                                          | place    | placeId |
    +----------------------------------------------------+----------+---------+
    | 宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣 | 水泊梁山 |     123 |
    +----------------------------------------------------+----------+---------+
    1 row in set (0.00 sec)mysql> select * from seq_aux;
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    |  4 |
    |  5 |
    |  6 |
    |  7 |
    |  8 |
    |  9 |
    | 10 |
    | 11 |
    | 12 |
    | 13 |
    | 14 |
    | 15 |
    | 16 |
    | 17 |
    | 18 |
    | 19 |
    | 20 |
    +----+
    20 rows in set (0.00 sec)mysql> select placeId,place,
        ->  SUBSTRING_INDEX(SUBSTRING_INDEX(usertName,',',seq_aux.id),',',-1) as usertName
        -> from user,seq_aux
        -> where length(usertName)-length(replace(usertName,',',''))>=seq_aux.id;
    +---------+----------+-----------+
    | placeId | place    | usertName |
    +---------+----------+-----------+
    |     123 | 水泊梁山 | 宋江      |
    |     123 | 水泊梁山 | 卢俊义    |
    |     123 | 水泊梁山 | 吴用      |
    |     123 | 水泊梁山 | 公孙胜    |
    |     123 | 水泊梁山 | 关胜      |
    |     123 | 水泊梁山 | 林冲      |
    |     123 | 水泊梁山 | 秦明      |
    |     123 | 水泊梁山 | 呼延灼    |
    +---------+----------+-----------+
    8 rows in set (0.04 sec)mysql>
      

  9.   


    谢谢ACMAIN_CHM,但是,你是借助另外一个表seq_aux的id字段来实现的,seq_aux表中有多少条记录,就能显示user表中username字段中多少个名字。你能有不借助另外一个表实现吗?
      

  10.   

    MYSQL中没有,如果不是辅助表,则需要使用存储过程了。
      

  11.   


    呵呵,谢谢你。我想用powerIsAll这个美眉的function,但是有语法错误,你可以帮我改一下吗?分都给你吧,因为要在程序代码中调用,谢谢了!