我有两张表是这样的:
主表:id(int)、title(varchar)等。 分表:main_table_id(外键入主表)、tag(varchar)等
主表中的给定行可以有零个或多个子表行。
我想做一个查询,它将返回主表的每一行,主表的列,以及子表的仅一行(无关紧要)的列,如果这些列中有任何,否则为 NULL。
当然,如果我只做一个基本的 LEFT OUTER JOIN,那么我当然会多次重复主表,子表中的每个匹配项一次。
我确定我在使用 LEFT OUTER JOIN 和某种诡计之前已经看到过这样做,它强制从子表中只选择一行,而不是全部 - 可能会选择最小值或最大值OID。然而,一个多小时的谷歌搜索没有产生任何解决方案。
有人的工具包里有这个技巧吗?
最佳答案
如果您使用的是 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;
注意:那是给你展示大概的思路。我没有机会运行它,因此可能需要进行一些更改,但概念就在那里。
关于sql - 如何外部连接两个表(主表和多对一子表)以仅从第二个表中获取一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/667459/