2014-02-07 169 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); 

希望这会有所帮助。