说
SELECT T1.A
,T1.B
,T2.X
,T2.Y
,(SELECT T1.C WHERE T1.K=T2.K) --Specific Condition only for this column
FROM TABLE1 AS T1
JOIN TABLE2 AS T2 ON T1.G = T2.G
我的问题是,自Table1
和Table2
加入后,如何删除查询中的第5行
(SELECT T1.C WHERE T1.K = T2.K)
因为正在加入相同的表格(TABLE1
和TABLE2
)。有没有办法消除这条线和条件,以便产生相同数量的行?
答案 0 :(得分:3)
这会给你相同的结果吗?我很惊讶它的工作原理 - 如果T1.K=T2.K
上的关系不是1-1,那么你就会收到错误。
SELECT T1.A
,T1.B
,T2.X
,T2.Y
,CASE WHEN T1.K=T2.K THEN T1.C ELSE NULL END
FROM TABLE1 AS T1
JOIN TABLE2 AS T2
ON T1.G = T2.G
答案 1 :(得分:0)
您发布的查询看起来非常像简化示例,因此它不是您实际使用的并且已经过验证可以正常工作的查询。
右?
我问的原因是,正如评论中所指出的,您的查询很可能包含错误,并且不会让您想要我想要的内容。应该是这个(?):
SELECT T1.A
,T1.B
,T2.X
,T2.Y
,(SELECT T3.C FROM TABLE1 AS T3 WHERE T3.K=T2.K) --Specific Condition only for this column
FROM TABLE1 AS T1
JOIN TABLE2 AS T2 ON T1.G = T2.G
即便如此,如果在TABLE1中有多个行,并且在TABLE2中也找到了K值,则查询将导致运行时出错。子查询
,(SELECT T3.C FROM TABLE1 AS T3 WHERE T3.K=T2.K) --Specific Condition
然后,将在TABLE1中找到两个(或更多)C值,而来自子查询的值不能超过外部查询中的一行。 IF 数据是这样的,在找到的TABLE1中只有一行(最多),那么它就可以工作。在这种情况下,下面的查询应该会给你相同的结果:
SELECT T1.A
,T1.B
,T2.X
,T2.Y
,T3.C
FROM TABLE1 AS T1
JOIN TABLE2 AS T2 ON T1.G = T2.G
LEFT OUTER JOIN TABLE1 AS T3 ON T2.K = T3.K