假设我有两个表:的Sql查询,组关系
Group
(
id integer primary key,
someData1 text,
someData2 text
)
GroupMember
(
id integer primary key,
group_id foreign key to Group.id,
someData text
)
我知道,我的SQL语法不正确:)希望是非常明显的。我的问题是这样的:我想加载一个组记录和与该组关联的所有GroupMember记录。正如我所看到的,有两种选择。
一个单一的查询:
SELECT Group.id, Group.someData1, Group.someData2 GroupMember.id, GroupMember.someData
FROM Group INNER JOIN GroupMember ...
WHERE Group.id = 4;
两个查询:
SELECT id, someData2, someData2
FROM Group
WHERE id = 4;
SELECT id, someData
FROM GroupMember
WHERE group_id = 4;
第一溶液只有是一个数据库往返的优点,但是具有返回冗余数据的缺点(所有组数据为每个组成员重复)
第二种解决方案不会返回重复的数据,但会涉及到数据库的两次往返。
这里有什么可取的?我想有一些门槛,如果组大小变得足够大,返回所有冗余数据的成本将大于额外数据库调用所涉及的开销。我应该在这里考虑什么其他的东西?
感谢, 乔丹
下面我回答,但你使用的是什么数据库? – Jeremy 2010-05-10 15:00:50
我正在使用postgres。 – Jordan 2010-05-10 15:36:21