2012-08-10 51 views
-1

我需要在存儲過程中加入結果集,我試過這個查詢但它不正確。在存儲過程中加入SQL查詢結果

SELECT * FROM (SELECT Field1, Field2 FROM Table1 WHERE Field4='val1') A 
INNER JOIN 
SELECT * FROM (SELECT Field1, Field3 FROM Table1 WHERE Field4='val2') b 
ON A.Field1 = B. Fileld1 

如何在存儲過程中連接結果表?

+3

「加入」工作相同w存儲過程的ay * inside *和純T-SQL一樣。你的加入完全錯了。問:你想要做什麼? – paulsm4 2012-08-10 05:13:36

回答

3

試試這個:

你沒有使用SELECT * FROM兩次..

SELECT * FROM 
(SELECT Field1, Field2 FROM Table1 WHERE Field4='val1') A 
INNER JOIN 
(SELECT Field1, Field3 FROM Table1 WHERE Field4='val2') b 
ON A.Field1 = B. Fileld1 
1

也許這將有助於

With cte_sample AS (SELECT Field1, Field2 FROM Table1 
WHERE Field4='val1') 
SELECT Field1, Field3 FROM Table1 AS a 
INNER JOIN cte_sample ON a.Field1 = cte_sample.Field1 AND 
WHERE a.Field4='val2' 
2

你正在做一些這方面是這樣的(舉個例子):

SELECT * FROM Table1 A 
INNER JOIN 
SELECT * FROM Table2 B 
ON A.FIELD1 = B.FIELD2 

哪一個是錯的。因爲你不需要寫兩次SELECT * FROM。正確的是:

SELECT * FROM Table1 A 
INNER JOIN 
Table2 B 
ON A.FIELD1 = B.FIELD2 

所以您的查詢應該是(包括創建過程):

CREATE PROCEDURE testJoining 
AS 
    SELECT * FROM 
     (SELECT FIELD1, Field2 FROM Table1 WHERE Field4='VAL1') A 
    INNER JOIN 
     (SELECT FIELD1, Field3 FROM Table1 WHERE Field4='VAL2') B 
    ON A.FIELD1 = B.FIELD1 
GO 

See this fiddle.
從同一個表中選擇數據的其他方法是:

SELECT A.Field1,A.Field2,B.Field3 FROM Table1 A 
INNER JOIN 
Table1 B 
ON A.FIELD1 = B.FIELD1 
WHERE A.Field4='VAL1' 
AND B.Field4='VAL2' 

See this fiddle

+0

SQLFiddle參考的+1。很酷 - 謝謝你! – paulsm4 2012-08-10 15:54:50