我是sql的新手。我有三张表mr1,mr2,mr3
。 Caseid
是所有这些表中的主键。我需要加入所有这些表列并显示结果。
问题是我不知道使用哪个连接。
当我加入所有这些就像下面的查询:
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,但在表mr2
中。
记录是重复的,任何人都可以在这方面帮助我吗?
答案 0 :(得分:0)
区别会做,但这不是正确的approch。 您需要添加另一个连接(mr1.caseid = mr3.caseid),因为mr2和mr3行必须与mr1中的同一行相关,否则最终会有2对,onde为每个连接到主表的表(mr2) 。 SO中的第一个答案,如果不是那么清楚,请原谅我。
答案 1 :(得分:0)
您的问题是您的表格是一对多的关系。当您加入它们时,除非您采取措施限制返回的记录,否则预计行数将会增加。如何修复取决于数据的含义。
如果所有字段完全相同,则添加DISTINCT将解决问题。但是,根据表的大小和返回的记录数,可能会更快,使用派生表将连接中的记录限制为只有多个记录的表中的一个。
如果至少有一个字段不同,那么您需要知道业务规则,以便您选择正确的记录。它可以通过添加where子句或使用聚合函数和组来实现,甚至两者都可以实现。这实际上取决于结果集的含义,这就是为什么你需要在你自己的组织中提出进一步的问题,因为他们是唯一知道哪些多个记录是正确的人从谁的角度来选择的原因。将使用查询的结果。此外,企业可能实际上想要查看所有记录,而您根本没有任何问题。