加入,但不加入(假设q。)

时间:2013-09-10 21:32:58

标签: sql sql-server

假设我有一个包含几列的表A.我使用表,其中条目没有索引,因为它们是“历史”表。不过,我使用一个特定的列来识别我的东西。让我们称这个ID。 如果您进行如下所示的查询,有时您会收到一行,其他情况会有一些。

SELECT * FROM A WHERE ID = '<something>'

假设我还有两个表,B和C.两个都有ID列,比如A. 此外,A中的一些ID也在B或C中.B中存在的ID不能存在于C.并且A中的所有ID都存在于B或C中。

B和C包含额外信息,我想在同一个SELECT中加入A。 我的问题是,他们只会提供额外的信息。我的输出中不需要额外的行..

为了更清楚:我从A中选择返回一百行输出。 当我离开/右/内连接B表时,我 - 可能 - 输出的线数较少。加入C也是一样。

最后,我的问题是: 有没有办法只将表B连接到B中存在的那些ID,反之亦然? (而且我希望它在同一个SELECT ....语句中。)

2 个答案:

答案 0 :(得分:1)

如果您不想在输出中添加额外的行,则可以执行以下操作:

select *
from A join
     (select B.*
      from B
      group by B.id
     ) B
     on A.id = B.id;

这将为每个id从B中选择任意值,并将它们连接回A。这是你想要的吗?

答案 1 :(得分:0)

好吧你应该在A和两个“Select MAX”之间建立一些左连接:一个来自表B,另一个来自表C.

如果您不想要表A中的“重复”ID,表A上的“分组依据”应该会有所帮助。