2014-11-24 50 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