我的数据库中有两个表:
test1,如下所示:
ID pubmed_ID
-------------------
1 22
2 22test2看起来像这样:
antigen pubmed_ID
------------------
Hello 22
Bye 22当我使用以下select语句时:
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”形成复合主键
我是不是漏掉了什么简单的东西?
发布于 2010-07-12 10:48:16
因为两者都是匹配的。你希望它选择哪一个?
所有行都有相同的pubmed_ID。因此,test1的每一行都与test2的每一行匹配,因此在连接表中有四(2*2)行。
发布于 2010-07-12 10:49:16
这是因为根据连接条件,test2中的两条记录与test1中的每条记录都匹配。
如果你想让它更有选择性,你需要添加你想要的过滤条件。
发布于 2010-07-12 10:52:41
您的联接正在按其应有的方式运行。您正在匹配的pumed_ID对于每一行都是相同的。
当DBE从表test1抓取第1行时
ID pubmed_ID
-------------------
1 22然后匹配到表test2中具有相同pubmed_ID的行,两行都匹配...
antigen pubmed_ID
------------------
Hello 22
Bye 22表test1中的第二行也发生了完全相同的事情,使整个结果集包含四行。
讲得通?
https://stackoverflow.com/questions/3225561
复制相似问题