帮助加入

时间:2011-01-05 20:19:58

标签: sql join

我的第一张表有大约18K的记录

所以当我

select * from table2我得到大约18k

我正在尝试按照以下方式加入它,但我得到的回报是26K ..我做错了什么?我虽然它应该返回所有“正确的”aka table2记录,并在单独的列中向我显示第一个的任何值匹配......

Select t1.fID , t2.*
FROM table1 t1 right join table2 t2 on t1.fName = t2.f

这是我的表格的例子:

表1: fID,fName

表2:id,f,地址等

每当f = fName

时,我需要从fID列获取表2中的所有记录

4 个答案:

答案 0 :(得分:3)

table1有许多行,其值为fname,与table2中的相同。

例如,假设5k行table2在table1中没有匹配的行,表1中每个剩余的13k table2行平均有2行

因为您还要求table1的列,所以会发生这种情况。您将注意给定t2.fname的多个t1.fId值。或者是NULL

答案 1 :(得分:2)

如果t1.fName和t2.f不是其表的唯一标识符,您会发现table1中的行与table2中的多行连接。

答案 2 :(得分:0)

RIGHT JOIN关键字返回右表(table_name2)中的所有行,即使左表(table_name1)中没有匹配项也是如此。See Right Join

所以看起来您没有正确设置匹配条件或者没有匹配。

答案 3 :(得分:0)

当在表2和/或表1中重复某些fName值时,这是可能的。

运行这些查询并参见:

SELECT fName, COUNT(1) FROM Table2 GROUP BY fName HAVING COUNT(1) > 1

SELECT fName, COUNT(1) FROM Table1 GROUP BY fName HAVING COUNT(1) > 1