一张表A,如下所示:
table A:
==========
ID NAME
1 Ted
2 John
3 Sandy
4 Robert
5 Helen
table B:
=========
CONTRIBUTION CONTRIBUTOR_ID
100 1
200 3
150 3
270 2
30 1
假设表B非常大且表A很小,我想对此进行伪迭代。 - 从表A中获取第一个ID - 搜索表B中的第一个匹配项,如果找到则添加到结果中 - 如果没有继续到表A中的下一个ID。 - 重复到表A的结尾
我想要一个表B中存在的表A中所有ID的列表 所以这里的结果将是:
1
2
3
当然,表格已正确编入索引。
任何想法如何在MySQL中有效地写这个? 感谢
答案 0 :(得分:5)
或者只是简单地
select distinct contributor_id
from table B
答案 1 :(得分:3)
select distinct ID from tableA inner join tableB
on table.ID=tableB.CONTRIBUTOR_ID
答案 2 :(得分:2)
试试这个:
select tA.ID
from tableA tA inner join tableB tB on tA.ID = tB.CONTRIBUTOR_ID
group by tA.ID
答案 3 :(得分:0)
查询
SELECT * from A,B where A.ID = B.CONTRIBUTOR_ID
将在两个表中选择具有现有ID的所有行。它会遗漏A中从未有贡献的所有行(不存在于B中)
修改强>:
只获取那些捐赠者的ID,请尝试:
SELECT ID FROM A WHERE EXISTS (SELECT CONTRIBUTOR_ID FROM B where ID = CONTRIBUTOR_ID)
答案 4 :(得分:0)
如果表B中可能包含表A中不存在的贡献者,那么我建议尝试:
select tA.ID
from tableA tA
inner join (select distinct contributor_id from tableB) tB
on tA.ID = tB.CONTRIBUTOR_ID
(假设你有关于tableB上的Contributor_ID的索引)
答案 5 :(得分:0)
可以使用子查询
完成Select distinct ID from A where ID in(select CONTRIBUTOR_ID from B)