加入多个结果集

时间:2012-08-10 05:07:35

标签: sql

我对四个不同的表有四个Select查询,每个表只提取一个记录。例如:

Select * from table where col1 = 'something'

给出一行有3列。

第二个选择查询还会给出一个包含两列(字段)的记录。对于第三和第四选择查询也是如此。

我想将所有四个ResultSet组合成一行。怎么可能?

我会为你编写查询

第一个

Select Top 1 column1,column2 from table 1 where column 1 = 'something' 
and col1 = (Select max(col1) where column 1 = 'something')

第二次查询

Select Top 1 column1 , column3 from table 2 where column 1 = 'something' 
and column3 = (Select max(column3) where column 1 = 'something')

第3次查询使用从查询2获得的结果

Select column4 ,column3 from table 3 
where column3 = (obtained from 2nd query) (there is only one row)

第四

Select column5 from table 4 
where column3 = (obtained from 2nd query) (there is only one row)

这意味着我必须加入第2,第3,第4个查询,然后结果set int 1st

由于列不同,我不能使用union

所以加入结果集只有问题

我希望它解释

结果集 Sql query1

column1 column2

aaa bbb

SQL查询2

column1 column3

aaa cccc

Sql query 3

column3 column4

cccc dddd

sql query 4

column3 column5

cccc eeee

结果集

coulumn1 column2 column3 column4 column5

aaa bbb cccc dddd eeee

希望reultset解释一切

2 个答案:

答案 0 :(得分:1)

通过添加列使所有查询的列号和类型相同(即使您不需要它们):

Select column4, column3 from table 3 
where column3 = ...

Select column5, column3 from table 4 
where column3 = ...

顺便说一下,您的查询可能会大大简化。现在很乱。

也许你应该重新说明你的问题,用英语解释你想要做什么以及你的表架构是什么,让我们建议整个查询。

答案 1 :(得分:0)

create table table1(c1 varchar(10), c2 varchar(10), c3 varchar(10), c4 varchar(10), c5 varchar(10));

create table table2(c1 varchar(10), c2 varchar(10), c3 varchar(10), c4 varchar(10), c5 varchar(10));

create table table3(c1 varchar(10), c2 varchar(10), c3 varchar(10), c4 varchar(10), c5 varchar(10));

create table table4(c1 varchar(10), c2 varchar(10), c3 varchar(10), c4 varchar(10), c5 varchar(10));

insert into table1 values (1,2,3,4,5);

insert into table2 values (1,5,3,7,8);

insert into table3 values (1,15,3,17,18);

insert into table4 values (1,22,3,24,25);


  with max3 as
  (select c1, max(c3) c3 from table2 where table2.c1 = 1 group by c1)
  select table1.c1, table1.c2, max3.c3, table3.c4, table4.c5
    from table1
    join max3
      on max3.c1 = table1.c1
    join table3
      on table3.c3 = max3.c3
    join table4
      on table4.c3 = max3.c3
   where table1.c1 = 1;

输出

c1 c2 c3 c4 c5 
 1  2  3 17 25