+ -
当前位置:首页 → 问答吧 → 两个表组合的问题

两个表组合的问题

时间:2011-06-23

来源:互联网

我现在有两个表:
test
ID,Name,Win,Tie,Lost

content
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

作者: edisonli   发布时间: 2011-06-23

贴记录及要求结果出来看看

content格式是否固定

作者: wwwwb   发布时间: 2011-06-23

test记录
1 test1 1 2 3
2 test2 2 3 4

content记录
1 1 Tie
2 1 Lost

content的Field字段的内容只会是Win Tie Lost

我现在想要取出的数据是:
select content.id,(这里我需要根据Field字段取对应的test相应字段的值,在这里就是Tie字段的值) from content inner join test on content.TestID=test.ID

1 2(2是test表Tie的值)
2 3(2是test表Lost的值)

作者: edisonli   发布时间: 2011-06-23

上面说错了一点

1 2(2是test表Tie的值)
2 3(3是test表Lost的值)

作者: edisonli   发布时间: 2011-06-23

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)

作者: rucypli   发布时间: 2011-06-23

1、字段名标出来;
2、要求结果是什么。

作者: wwwwb   发布时间: 2011-06-23

引用 5 楼 wwwwb 的回复:
1、字段名标出来;
2、要求结果是什么。

test
字段:
ID,Name,Win,Tie,Lost
值:
1 test1 1 2 3
2 test2 2 3 4

content
字段:
ID,TestID,Field
值:
5 1 Tie
6 1 Lost

要求的结果
5 2(2是test表Tie的值)
6 3(3是test表Lost的值)

作者: edisonli   发布时间: 2011-06-23

引用 4 楼 rucypli 的回复:
mysql> select substring_index(substring_index('1,1,Tie',',',2),',',-1);
+----------------------------------------------------------+
| substring_index(substring_index('1,1,Tie',',',2),',',-1) |
+--……


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

作者: edisonli   发布时间: 2011-06-23

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

作者: wwwwb   发布时间: 2011-06-23

引用 8 楼 wwwwb 的回复:
select content.id,
if(Field='tie',tie,if(Field='Lost',Lost,Win))
from content inner join test on content.TestID=test.ID


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

作者: edisonli   发布时间: 2011-06-23

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

作者: wwwwb   发布时间: 2011-06-23

SQL code
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)

作者: vipper23   发布时间: 2011-06-23

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

怎样动态生成呢,没有用过,谢谢

作者: edisonli   发布时间: 2011-06-23

相关阅读 更多

热门下载

更多