需要一个有效的查询来从两个表中进行选择

时间:2015-04-30 11:44:28

标签: mysql sql database

一张表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中有效地写这个? 感谢

6 个答案:

答案 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)