【发布时间】:2014-11-17 19:58:28
【问题描述】:
使用 SQL Server 2012,并给出以下代码(修改为“隐藏”内容)...
select T1.ID
,T2.F2
,T2.F3
,T2.F4
from (
select distinct ID
from A1
) T1
inner join (
select ID
,F2
,F3
,F4
from A2
) T2 on T1.ID = T2.ID
where T2.F2 not in (V1,V2,V3,V4) and
T2.F3 in (V5,V6,V7,V8)
...我的目标是从 T1 和 T2 这两个表中获取具有匹配 ID 的项目列表。所有条件都在 T2 表上,而 T1 表用于仅获取那些按 ID 匹配的记录。非常坦率的。但是...我从 T2 获取记录,但在 T1 中没有匹配的 ID。即使条件在 T2 上,我仍然应该期望 T1 控制返回哪些 ID。
ID 的值:
T1: 3, 5, 6, 7, 10
T2: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
我希望返回:
T1: 3, 5, 6, 7, 10
T2: 3, 5, 6, 7, 10
但我似乎得到的是:
T2: 1, 3, 4, 5, 6, 7, 8, 10
我什至尝试在所有其他内容之后重新引入 T1 唯一 ID(如 C1)...
select B1.ID
,B1.F2
,B1.F3
,B1.F4
from (
select T1.ID
,T2.F2
,T2.F3
,T2.F4
from (
select distinct ID
from A1
) T1
inner join (
select ID
,F2
,F3
,F4
from A2
) T2 on T1.ID = T2.ID
where T2.F2 not in (V1,V2,V3,V4) and
T2.F3 in (V5,V6,V7,V8)
) B1
inner join (
select distinct ID
from A1
) C1 on B1.ID = C1.ID
...但是不行。结果相同。
看起来它应该是一个直接的内连接,但它更像是一个右连接。有什么想法或建议吗?
【问题讨论】:
-
在末尾添加另一个
AND t1.id=t2.id。 -
它不会运行。构造查询的方式,为连接公开的唯一 ID 来自 B1 和 C1。 T1 和 T2 在 B1 子查询中,因此无法在外部访问。但我感谢您的快速回复!
-
对不起。我的意思是说我试过了,它不会运行。我尽量不要太傲慢,以至于我会立即放弃帮助!
-
使用相关子查询
(select distinct ID from A1 WHERE A1.ID=A2.ID)
标签: sql-server sql-server-2012 inner-join