0

假设我有一个包含几列的表 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 中存在的那些 ID 上加入表 B,反之亦然?(而且我希望它在同一个 SELECT.... 语句中。)

4

2 回答 2

1

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

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

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

于 2013-09-10T22:45:39.173 回答
0

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

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

于 2013-09-10T21:49:17.667 回答