0

我是 sql 的新手。我有三张桌子mr1,mr2,mr3Caseid是所有这些表中的主键。我需要加入所有这些表格列并显示结果。问题是我不知道要使用哪个连接。当我像下面的查询一样加入所有这些时:

select mr1.col1,mr1.col2,mr2.col1,mr2.col2,mr3.col1,mr3.col2
from mr1,mr2,mr3
where mr1.caseid = mr2.caseid
and mr2.caseid = mr3.caseid;

它显示 4 条记录,尽管最大记录数是 2,在 table 中mr2。记录重复,有人可以在这方面帮助我吗?

4

2 回答 2

0

Distinct会这样做,但这不是正确的方法。您需要添加另一个连接 (mr1.caseid = mr3.caseid),因为 mr2 和 mr3 行必须与 mr1 中的同一行相关,否则您最终会得到 2 对,每个连接到主表 (mr2) 的表的 onde . SO中的第一个答案,如果不是那么清楚,请原谅我。

于 2013-07-08T17:58:44.990 回答
0

你的问题是你的表是一对多的关系。当您加入它们时,预计行数会增加,除非您采取措施限制返回的记录。如何修复取决于数据的含义。

如果所有字段完全相同,则添加 DISTINCT 将解决问题。但是,根据表的大小和您要返回的记录数,使用派生表将连接中的记录限制为仅来自具有多条记录的表中的一条记录可能会更快。

但是,如果至少有一个字段不同,那么您需要了解允许您选择正确记录的业务规则。它可以通过添加 where 子句或使用聚合函数和 group by 甚至两者来完成。这实际上取决于结果集的含义,这就是为什么您需要在您自己的组织中提出进一步的问题,因为他们是唯一知道从谁的角度选择多个记录中的哪一个是正确的将使用查询的结果。此外,企业实际上可能希望查看所有记录,而您完全没有问题。

于 2017-02-02T15:02:36.477 回答