我的数据库中有两个表:
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”形成一个复合主键
我在这里错过了一些简单的东西吗?
答案 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记录的相同。