多表连接

时间:2015-01-12 15:51:06

标签: sql sql-server sql-server-2008

我有一个场景,我有3个表(Table1, Table2, Table3

Table1包含每个MEMBNO都是唯一的数据

我希望JOINTable2Table3显示结果,但每个结果只有一行

我试过

SELECT A.MEMBNO,A.FIELD1,B.FIELD1,B.FIELD2,C.FIELD1
FROM Table1 A
INNER join Table2 B ON A.MEMBNO = B.MEMBNO
INNER join Table3 C ON A.MEMBNO = C.MEMBNO

但我得到了多个结果。如果{2}在Table2中两次而Table3在四次,我会返回8行。

我的JOIN是正确的还是通过JOIN之后的MEMBNO语句控制它的唯一方法来控制从Table2和Table3返回的内容(即:SQL“哑”加入所有数据并期望WHERE语句是文件管理器吗?)

非常感谢

3 个答案:

答案 0 :(得分:2)

您正在与之抗争的是数据之间的不同关系。 Table1是主键表,每个MEMBNO有一行。表2 \ 3对于每个MEMBNO具有多于一行。因此,您需要考虑的是在尝试连接之前您真正想要查看的数据。基数的差异在连接发生时导致行重复。如果您希望将Table2 \ 3中的数据压缩成一行,请考虑一下它的外观。即,您想将不同行中的数字相加到总数中吗?你想拍最大日期吗?等

最好的办法是从每个表中提供一些数据示例并给出示例结果。如果你添加这些信息,我们非常乐意去试试。

答案 1 :(得分:-1)

因为我只关心MEMBNO。如果我从Table2和Table3两个表中使用不同的MEMBNO该怎么办。

检查以下示例:

create table #t1
(
F1 int,
F2 int
)

Insert into #t1 values(1, 111)

Create table #t2
(
F1 int,
F2 int
)

Insert into #t2 values(1, 111)
Insert into #t2 values(1, 222)

Create table #t3
(
F1 int,
F2 int
)

Insert into #t3 values(1, 333)
Insert into #t3 values(1, 444)


SELECT a.*
FroM #t1 a left join  (Select distinct f1 from #t2) b on a.F1 = b.f1
left join  (Select distinct f1 from #t3) c on a.F1 = c.f1

其中#t1,#t2,#t3分别是table1,table2,table3 在所有表格中,F1都是你的MEMBNO。

答案 2 :(得分:-5)

由于使用内连接,您会得到多个结果。 你应该使用左或右连接。