2014-02-07 86 views
0

我有兩個疑問,我想加入與SQL第二,這裏是我的查詢第一個查詢,如何加入一個查詢到另一個查詢

第一個查詢

OleDbCommand Query1 = new OleDbCommand(); 
Query.CommandText = "SELECT [Mastertable].ID " + 
"FROM [Mastertable] INNER JOIN [relationship] ON [Mastertable].ID = [relationship].SW1_ID " + 
"WHERE ([Mastertable].[PN]= @PN AND [Mastertable].[Ver][email protected]) " + 
"GROUP BY [Mastertable].[ID]"; 

DataSet ResultSet = RunQuery(Query1); 

以上查詢基本恢復,其中PN = PN輸入和版本=版本的輸入。(我把結果數據集中

我想從QUERY1加入ID列再次

第二查詢Mastertable。ID的ID,

OleDbCommand Query2 = new OleDbCommand(); 
Query2.CommandText = "SELECT [Mastertable].PN, [Mastertable].[Ver], [relationship].[Category], [Mastertable].[Component_Name] " + 
"FROM (Query1 INNER JOIN [relationship] ON Query1.[ID] = [relationship].SID) INNER JOIN " + 
"[Mastertable] ON [relationship].SW2_ID = [Mastertable].[ID]"; 

DataSet ResultSet2 = RunQuery(Query2); 

但這段代碼不起作用,我在網上搜索了很多,並嘗試了一些,但他們沒有幫助。我想用ResultSet1.Tables [0] .TableName和ResultSet1.Tables [0] .Columns [0] .name和但沒有工作=(

請幫

+1

我認爲最好只使用一個查詢。 SQL是加入數據的最佳位置。 – AFetter

+0

解決!感謝大家! = D – DaveZ

回答

0
OleDbCommand Query2 = new OleDbCommand(); 
Query2.CommandText = "SELECT [SW Mastertable].SW_PN, [SW Mastertable].[SW_Ver], [SW relationship].[SW2_Category]," + 
" [SW Mastertable].[Component_Name] " + 
" FROM " + 
"(SELECT [Mastertable].ID as ID " + 
"FROM [Mastertable] INNER JOIN [relationship] ON [Mastertable].ID = [relationship].SW1_ID " + 
"WHERE ([Mastertable].[PN]= @PN AND [Mastertable].[Ver][email protected]) " + 
"GROUP BY [Mastertable].[ID]) as Query1 " + 
" INNER JOIN [SW relationship] ON Query1.[ID] = [SW relationship].SW1_ID INNER JOIN " + 
"[SW Mastertable] ON [SW relationship].SW2_ID = [SW Mastertable].[ID]"; 

DataSet ResultSet2 = RunQuery(Query2); 
+0

是的!非常感謝!有效。感謝您向我展示如何使用AS Query1 – DaveZ

1

你可以加入查詢1到第二(外)QUERY2作爲派生表如下:

SELECT [SW Mastertable].SW_PN, [SW Mastertable].[SW_Ver], 
     [SW relationship].[SW2_Category], [SW Mastertable].[Component_Name] 
FROM 
    (SELECT [Mastertable].ID 
    FROM [Mastertable] 
     INNER JOIN [relationship] ON [Mastertable].ID = [relationship].SW1_ID 
    WHERE ([Mastertable].[PN]= @PN AND [Mastertable].[Ver][email protected]) 
    GROUP BY [Mastertable].[ID] 
) Query1 
    INNER JOIN [SW relationship] ON Query1.[ID] = [SW relationship].SW1_ID) 
    INNER JOIN [SW Mastertable] ON [SW relationship].SW2_ID = [SW Mastertable].[ID]; 

如果您正在使用sql-server你也可以做到這一點的CTE:

WITH Query1 AS 
(
    SELECT [Mastertable].ID 
    FROM [Mastertable] 
     INNER JOIN [relationship] ON [Mastertable].ID = [relationship].SW1_ID 
    WHERE ([Mastertable].[PN]= @PN AND [Mastertable].[Ver][email protected]) 
    GROUP BY [Mastertable].[ID] 
) 
SELECT [SW Mastertable].SW_PN, [SW Mastertable].[SW_Ver], 
     [SW relationship].[SW2_Category], [SW Mastertable].[Component_Name] 
FROM 
    Query1 
    INNER JOIN [SW relationship] ON Query1.[ID] = [SW relationship].SW1_ID) 
    INNER JOIN [SW Mastertable] ON [SW relationship].SW2_ID = [SW Mastertable].[ID]; 
+0

這是SQL。操作正在使用asp.net –

+0

OP明確指出'加入第一個查詢與第二個SQL' – StuartLC

+0

我添加了「AS Query1 INNER JOIN [SW Relation]」而不是「Query1 INNER JOIN [SW Relation]」並且它工作正常!謝謝 – DaveZ

0

不是很確定這是否會工作但你仍然可以 試試看。如果有的話,請修復語法錯誤。

此外,我假設你有Query1對象可用(即不是空或不超出範圍),同時嘗試創建Query2對象。

OleDbCommand Query2 = new OleDbCommand(); 
Query2.CommandText = "SELECT [SW Mastertable].SW_PN, [SW Mastertable].[SW_Ver], [SW relationship].[SW2_Category], [SW Mastertable].[Component_Name], [SW relationship].SW2_ID " + 
"FROM (("+ Query1.CommandText +")TAB1 INNER JOIN [SW relationship] ON TAB1.[ID] = [SW relationship].SW1_ID) TAB2 INNER JOIN " + 
"[SW Mastertable] ON [TAB2].SW2_ID = [SW Mastertable].[ID]"; 

DataSet ResultSet2 = RunQuery(Query2); 

希望這會有所幫助。