2012-08-09 61 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