我在查询中有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的查询将返回。它运行没有问题,并产生有效的结果。
有人可以澄清这个查询的执行方式是如何工作的,因为它与总查询有关,如果你遇到过这个问题,也可以解决这个问题吗?
由于
答案 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函数完成所需的操作。
希望这有帮助。