有没有办法修改此查询并删除选择中的子查询

时间:2015-08-21 03:57:24

标签: sql sql-server

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 

我的问题是,自Table1Table2加入后,如何删除查询中的第5行

(SELECT T1.C WHERE T1.K = T2.K)

因为正在加入相同的表格(TABLE1TABLE2)。有没有办法消除这条线和条件,以便产生相同数量的行?

2 个答案:

答案 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