TSQL执行点

时间:2013-11-27 18:58:39

标签: sql sql-server-2008-r2

我在查询中有4个表。 表A. 表B. 表C. 表D.

表D包含与表B相关的查找值。 我已按如下方式构建查询:

Select a.Col1, a.Col2, b.Col1, b.Col2, c.Col1
from [Table A] a
inner join [Table C] c
    on c.key1= a.key1
    and c.key2 = 'static value'
inner join [Table B] b
    on b.key1 = a.key1
    and b.key2 = 'static value'
    **and b.key3 in (select d.key1
                   from [Table D] d)**
    and substring(b.key4, len(b.key4), 1) in ('static value 1', 'static value 2')
    and substring(b.key4, 1, len(b.key4)-1) in c.key1

所以我的问题出现在[表B]的连接上。具体来说,将b.key3加入值列表时。看起来SQL在进行连接后执行表D的查询,因为我得到了无效的结果。现在,如果我提供'In'特定值,表D的查询将返回。它运行没有问题,并产生有效的结果。

有人可以澄清这个查询的执行方式是如何工作的,因为它与总查询有关,如果你遇到过这个问题,也可以解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:0)

好像你只想检查[表d]中是否存在b.key3,你可以通过对表d使用内连接来解决这个问题,如果这个表之间存在一对多的关系然后其他人使用一个小组。

    Select a.Col1, a.Col2, b.Col1, b.Col2, c.Col1
    from [Table A] a
    inner join [Table C] c
        on c.key1= a.key1
    inner join [Table B] b
        on b.key1 = a.key1
    inner join [Table D] d
        ON  b.key3 = d.key1
    where c.key2 = 'static value' 
        and b.key2 = 'static value'
        and right(b.key4,1) in ('static value 1', 'static value 2')
        and substring(b.key4, 1, len(b.key4)-1) = c.key1
   group by a.Col1, a.Col2, b.Col1, b.Col2, c.Col1

我还将静态变量检查移动到WHERE子句并删除了SUBSTRING函数,因为您还可以使用RIGHT函数完成所需的操作。

希望这有帮助。