如何外部连接两个表(主表和多对一子表)以仅从第二个表中获取一项?

dan*_*ood 1 sql postgresql join outer-join

我有两个类似这样的表:

主表:id(int)、title(varchar)等子表:main_table_id(主表的外键)、tag(varchar)等

主表中的给定行可以有零个或多个子表行。

我想做一个查询,将返回主表的每一行,主表的列,以及子表的单行(无关紧要)的列,如果有的话,否则在这些列中为 NULL。

当然,如果我只是做一个基本的 LEFT OUTER JOIN 那么我当然会多次重复主表,子表中的每个匹配项都重复一次。

我确定我在使用 LEFT OUTER JOIN 和某种强制只从子表中选择一行而不是所有行的技巧之前已经看到过这样做了——也许选择最小或最大 OID。然而,一个多小时的谷歌搜索并没有产生任何解决方案。

有人在他们的工具带中有这个技巧吗?

Cha*_*ers 5

如果您使用的是 SQL Server,则可以使用 TOP 子句。如果它不是 SQL Server,则您必须查看该数据库是否提供了等效的东西(其中许多都提供)。像这样的东西...

Select * from Main m
left outer join 
(select top 1 * from subtable s
  where s.main_table_id = m.id) q
on q.main_table_id = m.id;
Run Code Online (Sandbox Code Playgroud)

注意:这是向您展示总体思路。我没有机会运行它,因此可能需要进行一些更改,但概念就在那里。