MySQL帮助,使用where子句复制条目

时间:2010-07-12 02:44:33

标签: mysql

我的数据库中有两个表:

test1看起来像:

ID   pubmed_ID
-------------------
1    22
2    22

test2看起来像:

antigen    pubmed_ID
------------------
Hello      22
Bye        22

当我使用以下选择陈述时:

select * 
  from test1, test2 
 where test1.pubmed_ID = test2.pubmed_ID;

我明白了:

ID pubmed_ID antigen pubmed_ID
--------------------------------
1  22        Hello   22   
2  22        Hello   22   
1  22        Bye     22       
2  22        Bye     22

为什么抗原会被复制?当它们只在test2表中存在一次时?

主键如下test1 =“ID”列,对于测试2,“抗原”和“pubmed_ID”形成一个复合主键

我在这里错过了一些简单的东西吗?

4 个答案:

答案 0 :(得分:2)

因为两者都匹配。你期望它选择哪个?

所有行都具有相同的pubmed_ID。因此,test1的每一行都匹配test2的每一行,因此连接表中有四(2 * 2)行。

答案 1 :(得分:2)

这是因为test2中的两条记录与test1中的每条记录相匹配,具体取决于加入条件。

如果您希望它更具选择性,则需要添加可过滤您喜欢的标准。

答案 2 :(得分:1)

您的加入正在按预期运行。您正在匹配pumed_ID,这对于每一行都是相同的。

当DBE从表test1

获取第1行时
ID   pubmed_ID
-------------------
1    22

然后匹配表test2中具有相同pubmed_ID的行,两行匹配...

antigen    pubmed_ID
------------------
Hello      22
Bye        22

表test1中的第二行完全相同,使整个结果集包含四行。

有意义吗?

答案 3 :(得分:0)

很简单,test1.ID = 1匹配,通过它的pubmed_ID Hello和Bye,以及其他test1记录的相同。