我现在有两个表:
test
ID,Name,Win,Tie,Lostcontent
ID,TestID,Field其中content表中的Field对应test中Win,Tie,Lost三个字段名如content的一个记录内容是:
1,1,Tie我现在就有一个需求是要联合查询,同时要根据联合的内容取出content表中Field对应的test的字段的值select content.id,(这里我需要去除Field字段对应的test相应字段的值,在这里就是Tie字段的值) from content inner join test on content.TestID=test.ID

解决方案 »

  1.   

    贴记录及要求结果出来看看content格式是否固定
      

  2.   

    test记录
    1  test1 1 2 3
    2  test2 2 3 4content记录
    1 1 Tie
    2 1 Lostcontent的Field字段的内容只会是Win Tie Lost我现在想要取出的数据是:
    select content.id,(这里我需要根据Field字段取对应的test相应字段的值,在这里就是Tie字段的值) from content inner join test on content.TestID=test.ID1 2(2是test表Tie的值)
    2 3(2是test表Lost的值)
      

  3.   

    上面说错了一点1 2(2是test表Tie的值)
    2 3(3是test表Lost的值)
      

  4.   

    mysql> select substring_index(substring_index('1,1,Tie',',',2),',',-1);
    +----------------------------------------------------------+
    | substring_index(substring_index('1,1,Tie',',',2),',',-1) |
    +----------------------------------------------------------+
    | 1                                                        |
    +----------------------------------------------------------+
    1 row in set (0.00 sec)
      

  5.   

    test
    字段:
    ID,Name,Win,Tie,Lost
    值:
    1 test1 1 2 3
    2 test2 2 3 4content
    字段:
    ID,TestID,Field
    值:
    5 1 Tie
    6 1 Lost要求的结果
    5 2(2是test表Tie的值)
    6 3(3是test表Lost的值)
      

  6.   


    能帮忙把组合sql写出来一下吗
      

  7.   

    select content.id,
    if(Field='tie',tie,if(Field='Lost',Lost,Win))
     from content inner join test on content.TestID=test.ID
      

  8.   


    还有其他办法不判断吗,因为现在到时固定了Win Tie Lost 三个值,但是后期可能会增加的
      

  9.   

    那就要用SP来动态生成SQL语句,
    if(Field='tie',tie,if(Field='Lost',Lost,Win))
    生成其中FIELD的值
      

  10.   

    select content.id,(case when Field='Tie' then test.Tie when Field='Lost' then test.Lost  when Field ='Win' then test.Win end) result from content,test where content.TestId=test.ID;
    +------+--------+
    | id   | result |
    +------+--------+
    |    5 |      2 |
    |    6 |      3 |
    +------+--------+
    2 rows in set (0.00 sec)
      

  11.   

    还有没有办法不在Sql语句或SP中使用判断Win,Tie,Lost之类的方法呢,因为这样有点不太灵活
      

  12.   

    SET @ee='';
    SELECT *,@ee:=CONCAT(@ee,' when Field=\'',FIELD,'\' then ',FIELD) FROM content;
    SET @ee=CONCAT('select * , case ',@ee,' end from content inner join test on content.TestID=test.ID');
    SELECT @ee;
    PREPARE stml FROM @ee;
    EXECUTE stml;