2012-08-09 79 views
0

我有四个选择查询四个不同的表,每个提取只有一个记录。例如:结合许多选择查询的结果集

Select * from table where col1 = 'something' 

给出一行有3列。

第二个选择查询还给出了一个具有两列(字段)的记录。第三和第四个选择查询也一样。

我想将所有四个结果集合成一个有一行的结果集。这怎么可能?

我会为你写查询。

第一之一:

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') 

第三查询使用从查询2获得的结果是:

Select column4 
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个查询,然后在第1个查询结果集。

由于列不同,我无法使用联合。

所以唯一的问题是加入结果集。

+0

在任何表 – AChamp 2012-08-09 11:07:48

+1

之间没有共同的字段发布查询将是非常有用的。 – Taryn 2012-08-09 11:07:56

+0

你为什么要这样做?听起来像是一个坏计划... – Thomas 2012-08-09 11:18:08

回答

0

您可以使用CROSS JOIN来完成此操作。

CREATE TABLE table1 (id int, column1 varchar(5), column2 varchar(15)); 

CREATE TABLE table2 (column3 varchar(5), column4 varchar(15)); 

CREATE TABLE table3 (id int, column5 varchar(5), column6 varchar(15)); 

INSERT INTO table1 VALUES (1, 'aaa', 'row1') 
INSERT INTO table2 VALUES ('bbb', 'table2') 
INSERT INTO table3 VALUES (1, 'ccc', 'table3') 
INSERT INTO table1 VALUES (1, 'ddd', 'table1') 

SELECT * FROM (SELECT * FROM table1) a 
      CROSS JOIN (SELECT * FROM table2) b 
      CROSS JOIN (SELECT * FROM table3) c 

结果:澄清后

id column1 column2 column3 column4 id column5 column6 
1  aaa  row1  bbb  table2  1  ccc  table3 
1  ddd  table1 bbb  table2  1  ccc  table3 

更新:

CREATE TABLE table1 
(
     id int IDENTITY(1,1) 
     , searchstring nvarchar(25) 
); 

CREATE TABLE table2 
(
     id2 int IDENTITY(10, 10) 
     , searchstring2 nvarchar(25) 
     , newsearchstring nvarchar(50) 
); 

CREATE TABLE table3 
(
     id3 int IDENTITY(100, 100) 
     , id2 int 
     , table3srow nvarchar(25) 
) 

INSERT INTO table1 VALUES ('something'); 
INSERT INTO table1 VALUES ('something else'); 
INSERT INTO table1 VALUES ('something'); -- ID = 3, this row will be selected by 1st query 

INSERT INTO table2 VALUES ('something', 'newvalue1'); 
INSERT INTO table2 VALUES ('something else', 'this will not be shown'); 
INSERT INTO table2 VALUES ('something', 'this will be returned by query 2'); -- ID = 30, this row will be selected by 2nd query 

INSERT INTO table3 VALUES (10, 'not relevant'); 
INSERT INTO table3 VALUES (20, 'not relevant'); 
INSERT INTO table3 VALUES (30, 'This is from table 3'); -- This row will be returned by 3rd query 


SELECT * FROM 
    (SELECT TOP 1 id, searchstring FROM table1 WHERE searchstring = 'something' and id =  (SELECT MAX(id) FROM table1 WHERE searchstring = 'something')) AS query1, 
    (SELECT TOP 1 id2, newsearchstring FROM table2 WHERE searchstring2 = 'something' and id2 = (SELECT MAX(id2) FROM table2 WHERE searchstring2 = 'something')) AS query2, 
    (SELECT id2, table3srow FROM table3) as query3 
WHERE query3.id2 = query2.id2 

使用指示为表3为表4相同的方法。

+0

对不起,请稍后回复 – AChamp 2012-08-10 04:35:03

+0

Pl。检查上面的查询希望它解释我正在使用sql server 2005 – AChamp 2012-08-10 04:49:53