我陷入了一个oracle查询
我正在做的是我正在加入cityid的两张桌子。
发生什么事情是当我查询第一个表时它返回486行但当我加入它们时无论哪个连接并加入它在cityid上它 返回570行请告知我如何才能获得486条记录查询如下
select c.year,c.amount,c.product,g.state
from Accounts c
join Address g
on g.cityid=c.cityid
order by c.year,c.product;
问候
答案 0 :(得分:2)
这完全有可能。
如果您有一个给定帐户的多个地址,或某个地址的多个帐户,您可能会收到的行数多于地址或帐户表中的行数。
考虑:
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条记录被返回,即使地址中有3条记录,重复记录地址2。
如果外键关系被颠倒,这可能会走另一条路。
这实际上是关系数据库的核心功能,即保持外键关系输入的数据不需要重复输入数据。
你可以通过只选择要加入的第一个(最低id)值来限制行..这通常涉及创建一个临时表,这是我将留给oracle专家的练习,因为我认为Sybase的语法为这是不同的(并且需要在存储过程中完成,yick)。
我发现自己想知道,除了您所描述的可能更有可能解决您的问题之外,对架构的解释是否会略有不同。