我在使用内连接时遇到了一些问题:
select count(distinct id)
from svn1,
svn2
where svn1.revno = svn2.revno
and svn1.type = 'Bug'
and svn2.authors IN (select authors
from svn2
where revno = '33')
如何使用内连接更快地加快速度?我对内部联接的查询给出了奇怪的结果。
svn1的表格信息:
专栏:id revno type
数据:
1 22 Bug
1 23 Change
1 24 Bug
2 33 Bug
2 34 Bug
svn2的表格信息:
专栏:revno authors
数据:
22 A
22 B
22 C
33 D
33 A
33 C
I want ids of type bug which have a common author with authors of revno 33. i.e ids which also have revno with authors A,D or C in it
一般来说,我也想要一个查询来回答一个id,找到其他有共同作者的id。
答案 0 :(得分:2)
select count(distinct svn1.id)
from svn1
inner join svn2 on svn1.revno = svn2.revno
where
svn1.type='Bug'
and svn2.authors IN (select authors
from svn2
where revno='33')
revno和作者是否有索引?
答案 1 :(得分:2)
你需要这样的东西:
select count(distinct id)
from svn1 inner join svn2 on svn1.revno = svn2.revno
inner join svn2 second on svn2.authors = second.authors
where svn1.type='Bug' and and second.revno='33'
答案 2 :(得分:1)
一般来说,我也想要一个查询来回答一个id,找到其他有共同作者的id。
select distinct svn1.id
from svn2
join svn2 link on svn2.author = link.author
join svn1 on link.revno = svn1.revno
where svn2.revno = '33'
以下
这有用吗?
select count(distinct id)
from svn1
inner join svn2 on svn1.revno = svn2.revno and svn1.authors = svn2.authors
where sv1.type = 'bug' and sv2.revno = '33'
答案 3 :(得分:0)
select count(distinct id)
from svn1 s1
inner join svn2 s2 on s1.revno = s2.revno
inner join svn2 s2b on s2.authors=sb2.authors and s2b.revno='33'
where
and svn1.type = 'Bug'
我认为这相当于您现有查询的功能。它可能会提高你的速度;但是,如果没有看到DB,我无法分辨。
比重构查询更重要的是,您的数据库表是否在revno
字段上有索引?如果没有,请添加一个 - 这比任何修改查询的效果要大得多。
答案 4 :(得分:0)
你说你想要的实际ID不是数,所以我这样做了。
select distinct s1.id
from svn1 s1
join svn2 s2
ON s1.revno = s2.revno
Where s1.type = 'Bug'
and s2.authors IN (select authors
from svn2
where revno = '33')
现在将来,你需要停止使用隐式连接,它们是一种非常糟糕的做法。它们很难正确维护,受到显式连接不受影响的错误的影响,因此比使用显式连接更具风险,它们使开发人员不能很好地理解连接以正确查询,并且当您需要使用左连接时它们会产生困难内部联合,他们已经过时了18年。
答案 5 :(得分:-1)
我不是100%清楚你要做什么,但这是我的尝试:
select count(distinct id)
from svn1
inner join svn2 on svn1.revno = svn2.revno
where svn1.type = 'Bug'
and svn2.revno = '33'