首页 新闻 搜索 专区 学院

sql 语句问题 懂的进

0
悬赏园豆:15 [已解决问题] 解决于 2014-06-03 15:47

我有4张表,做一个历史记录查询,每张表里都有一个对应的外键。

 

一般的多表连接查询数据都以一条跟着后面的,我要的是每个表的数据按ID一行一行来显示。

表1

ID

XXXXXXX 紧跟着下一行是表 2 的ID

XXXXXXX  紧跟着下一行是表 3 的ID 以此类推。

土匪吃黄瓜的主页 土匪吃黄瓜 | 初学一级 | 园豆:2
提问于:2014-06-03 15:11
< >
分享
最佳答案
0

没明白你描绘的意思...你有四个表,然后每个表之间是怎么关联的?你的查询结果的描述也好难理解啊,说详细点吧

收获园豆:15
LgV5 | 菜鸟二级 |园豆:221 | 2014-06-03 15:18

每个表都有一个相对的外键 

我要查出所有4张表的数据,但是显示方式是按所有的表的ID列来显示,而不是一行记录显示4张表的数据

显示结果就是要没行记录只显示一张表的单一数据

比如 select * from A,B,C,D where ID=XX

1行会4张表的数据,我要查出来显示4行记录,一行记录,就是一张表的数据。

 

 

土匪吃黄瓜 | 园豆:2 (初学一级) | 2014-06-03 15:26

@土匪吃黄瓜: 哦,懂了,就是取数据集合,那么你可以用union all 关键字,代码如下:

select a.id from a where a.id = 'xxxxxx'
union all
select b.id from b where b.id = 'xxxxxx'
union all
select c.id from c where c.id = 'xxxxxx'
union all
select d.id from d where d.id = 'xxxxxx'

这样你查询出来的结果就是以4个表的ID所组合成的结果

LgV5 | 园豆:221 (菜鸟二级) | 2014-06-03 15:33

@车上有首长: 试试,可以就给分!

土匪吃黄瓜 | 园豆:2 (初学一级) | 2014-06-03 15:36

@土匪吃黄瓜: 对了,你不可以用select * ,因为你这4个表的字段可能不是完全相同,使用select * 是肯定不行的,你只能搜索相同字段名称的列去进行组合,如果名称不相同,那么你如果想把他们组合到一起,必须使用 as 关键字创建别名比如

select b.id,b.state from hcc_s_posauditing b where b.id = 111
union all
select c.ID,c.caseno as state from hcc_CasePending c where c.ID = 111

这样的话才能进行组合,但是并不是任意字段你给他们创建别名就可以组合了,必须是字段的数据类型一致的,否则会出现转换不成功的异常,比如上面代码,都是varchar类型,就没关系

LgV5 | 园豆:221 (菜鸟二级) | 2014-06-03 15:49

@车上有首长: 再次感谢

土匪吃黄瓜 | 园豆:2 (初学一级) | 2014-06-03 15:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册