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

标签 sql postgresql join outer-join

我有两张表是这样的:

主表: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/

相关文章:

java - Oracle SQL 在由逗号分隔的许多值组成的一列中选择特定值

sql - 我无法添加外键

sql - 如果 Postgres 中不存在记录则插入值

postgresql - 在 Postgres 中使用 dblink 有什么捷径吗?

php - 如何为两个相关表创建MYSQL记录源

MySQL JOINS 不带 where 子句

SQL查询获取最近3个月的数据

mysql - 从选择结果中删除重复项

mysql - 如何使用 mySQL 查询链接 4 个表

mysql插入记录如果有>有别的