2012-02-02 15 views
1

條件我有一個SQL查詢這樣使用其中的SQL查詢

Select col1, (select abc from table2 where def=1) as col2 
From Table1 inner join table3 on Table1.id = table3.id 
Where col2 = 4 

的問題是,WHERE條件不起作用。我得到一個錯誤說

無效的列名稱COL2'

請幫我解決這個問題的SQL查詢。

在此先感謝

+1

這是您的實際查詢嗎?似乎很奇怪。子查詢不相關。 – 2012-02-02 16:05:35

回答

4

您可以在CROSS APPLY定義它,然後在引用SELECTWHERE

SELECT col1, 
     col2 
FROM Table1 
     INNER JOIN table3 
     ON Table1.id = table3.id 
     CROSS APPLY (SELECT abc 
        FROM table2 
        WHERE def = 1) C(col2) 
WHERE col2 = 4 
+0

+1良好的接收沒有看到。 – Yuck 2012-02-02 16:07:25

+0

@Martin:那可能是'CROSS JOIN',對嗎? – 2012-02-02 16:13:51

+0

@ypercube - 是的。我在想,如果子查詢可能返回0行而不是1(這也許我應該使用'OUTER APPLY'來代替),但是'WHERE'子句可以處理這個問題。 – 2012-02-02 16:15:34

0

使用CTE(公共表表達式):

WITH SubQuery AS (Col2) { 
    SELECT 
     ABC 
    FROM 
     table2 
    WHERE 
     def = 1 
} 
SELECT 
    T.Col1, 
    S.Col2 
FROM 
    SubQuery S, 
    Table1 T 
    INNER JOIN table3 t3 
     ON T.id = t3.id 
WHERE 
    S.Col2 = 4 

雖然我必須說我同意第一條評論 - 這是沒有意義的,因爲你的子查詢沒有關聯(加入)到你的查詢的其餘部分。 ..