2014-11-24 217 views
0

我正在舊項目中重寫同步,並且我希望儘可能保持它與舊代碼類似。在FilterClause中使用Inner Join

舊代碼的SQL代碼類似於FilterClause。直到現在,將舊的代碼選擇表達式轉換爲相應的FilterClause非常簡單。例如:

SELECT * FROM dbo.table_a WHERE num_id = @id 

已被翻譯爲:

...FilterClause = "num_id = @id"; 

不過,現在我遇到了一個問題...

的FilterClauses定義是獲取或設置SQL WHERE子句(不含WHERE關鍵字)用於過濾來自基表的結果集。 但現在我的SQL表達式是:

SELECT * 
FROM dbo.table_a 
INNER JOIN 
(
SELECT DISTINCT(num_id) 
FROM dbo.link_table_ab 
WHERE link_table_ab.b_index = 5 
) T2 ON table_a.num_id= T2.num_id 

所以問題是,有在主查詢中沒有WHERE ...我該怎麼辦?

回答

1

您可以使用INWHERE子句中的子查詢實現基本相同的邏輯。這對你有用嗎?

SELECT * 
FROM dbo.table_a 
WHERE table_a.num_id IN (SELECT num_id 
         FROM dbo.link_table_ab 
         WHERE link_table_ab.b_index = 5 
         ) 
+0

對速度有多大影響? – Markus 2014-11-24 13:09:37

+0

@Markus。 。 。它應該與原始框架中的連接非常相似。有時候,'exists'比'in'快一點,但這可能取決於數據和系統。 – 2014-11-24 13:17:03

+0

DISTINCT不會造成任何問題嗎? – Markus 2014-11-24 13:18:44