查询:如何删除重复记录
Select table_c.id_number, table_c.name, table_s.site_name,table_co.Contract_name
FROM table_c , table_s, table_m, table_o, table_a, table_con
WHERE
table_s.objid = table_c.sobjid
AND table_m.cobjid (+) = table_c.objid
AND table_o.objid (+) = table_m.olobjid
AND table_a.objid (+) = table_o.aobjid
AND table_co.objid (+) = table_a.conobjid;
这里我有6张桌子。 table_c和table_s有一个2的关系。有可能对于1个table_o记录,我们可以有2个table_c记录,也可能没有记录。因为我需要在SELECT和Table_c和table_s表中使用table_co值,所以我在所有表中使用了省略join table_c-> table_m- > table_o-> table_a-> table_co。
现在运行此查询它给了我重复的记录。我在table_c中有数百万条记录,所以如果我使用distinct或Union ALL删除重复记录,我的查询需要很长时间,这是不可接受的解决方案。
我可以以这样的方式纠正这个查询,它给我独特的记录没有性能问题。
请注意,这个查询是外部系统用来获取数据的sql视图的一部分。
在此先感谢。
请使用显式连接语法重写您的查询。 –
我同意蒂姆加入语法会使这更容易排除故障,因为你的关系不清楚。 http://www.w3schools.com/sql/sql_join_inner.asp是一个关于内连接的文章,以防这是一个新概念。我马上看到的一个问题是,你没有将table_s定义为其他表的关系,这意味着这将创建一个交叉连接,并且可能会返回大量重复项,这可能也是为什么按性能划分或分组很差的原因。 – Matt
嗨@ Matt/@ Tim,我同意使用显式连接(Inner/left outer join)并重新编写查询的建议。另一点,我不认为table_s可能是重复记录的原因,因为它与table_c有一个唯一的关系,而table_c是这个查询中的一个引导表。 Thanks- – HelloFriends