这是完全可能的。
如果给定帐户有多个地址,或者给定地址有多个帐户,那么您可能会得到比地址或帐户表中更多的行。
考虑:
Account
id | ... | cityid
4 | ... | 12
5 | ... | 12
6 | ... | 13
7 | ... | 14
Address
id | ... | cityid
2 | ... | 12
3 | ... | 13
4 | ... | 14
加入您将获得:
Account Address
id | ... | cityid | id | ... | cityid
4 | ... | 12 | 2 | ... | 12
5 | ... | 12 | 2 | ... | 12
6 | ... | 13 | 3 | ... | 13
7 | ... | 14 | 4 | ... | 14
因此,您会看到返回了 4 条记录,尽管 Address 中有 3 条记录,其中记录 Address.2 被重复。
如果外键关系被颠倒,这可能会发生相反的情况。
而这其实是关系型数据库的核心特点,输入的数据保持外键关系,不需要重复输入。
您可以通过仅选择要加入的第一个(最低 id)值来限制行。这通常涉及创建一个临时表,这是我将留给 oracle 专家的练习,因为我认为 Sybase 的语法是不同的(并且需要在存储过程中完成,yick)。
我发现自己想知道在您所描述的之外是否可能对架构有稍微不同的解释,这可能更有可能解决您的问题。