使用不带子查询的连接排除

时间:2014-09-02 17:43:35

标签: sql select join inner-join

如何使用join(不使用子查询)来跟踪以下代码以获得相同的结果

select a_key from table_a a 
inner join table_b b --in my code I've 5 joins like that
    on a.a_key=b.a_key 
where a_key not in
    (select a_key from table_c     --and conditions within this brackets also
        where var_a beteween  table_c.col1 and table_c.col2
        or var_b beteween  table_c.col1 and table_c.col2
    )

1 个答案:

答案 0 :(得分:0)

以下基本上是相同的逻辑:

select a_key
from table_a a inner join
     table_b b
     on a.a_key = b.a_key left join
     table_c c
     on (var_a between table_c.col1 and table_c.col2 or
         var_b between table_c.col1 and table_c.col2
        ) and
        a.a_key = c.a_key
where c.a_key is null;

您应该在列前面加上表别名。列a_key与您的原始列不明确,var_a列和var_b列也不明确。

如果任何匹配的table_c.a_key值为NULL,则会略有不同。在这种情况下,join版本的行为可能更像您期望的那样。