【问题标题】:Using Inner Join in FilterClause在 FilterClause 中使用内部联接
【发布时间】:2014-11-24 13:02:28
【问题描述】:

我正在重写一个旧项目中的同步,我希望它尽可能与旧代码相似。

旧代码的 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... 我该怎么办?

【问题讨论】:

    标签: c# sql sql-server sync microsoft-sync-framework


    【解决方案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
                            )
    

    【讨论】:

    • 这对速度有多大影响?
    • @Markus 。 . .它应该与最初框架的连接非常相似。有时,existsin 快一点,但这可能取决于数据和您的系统。
    • DISTINCT 不会造成任何问题吗?
    • @Markus 。 . .在join 中需要distinct 以防止行重复。您不能使用 where 子句中的表达式复制行,因此没有必要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2012-07-19
    • 2017-12-22
    • 1970-01-01
    • 2014-07-23
    • 2010-10-16
    • 2016-07-14
    相关资源
    最近更新 更多