我有一个场景,我有3个表(Table1, Table2, Table3
)
Table1
包含每个MEMBNO
都是唯一的数据
我希望JOIN
到Table2
和Table3
显示结果,但每个结果只有一行
我试过
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
语句是文件管理器吗?)
非常感谢
答案 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)
由于使用内连接,您会得到多个结果。 你应该使用左或右连接。