我需要加入三张桌子。前两个很容易,并且基于相同的密钥。一个简单的外连接将起作用。第三个是棘手的。它有一个类似的键,但必须在一个键的左侧14上匹配。这会产生我不想要的重复。基本上,我希望TOP 1 FROM Table3能够正确匹配ID。
使用T-SQL。
表格庞大而复杂,所以我在下面概述了一个带有示例数据的表格的简单示例以及我现在正在运行的查询。
表1
ID1 ID2 Field1 Field2 Field3 Field4
0000000000 00000000000000a Info1 Info2 Info3 Info4
2222222222 11111111111111b Info1 Info2 Info3 Info4
1111111111 22222222222222c Info1 Info2 Info3 Info4
表2
ID1 ID2 Field1 Field2
0000000000 00000000000000a Info5 Info6
2222222222 11111111111111b Info5 Info6
1111111111 22222222222222c Info5 Info6
表
ID1 ID2 Field1
0000000000 00000000000000a Info7
0000000000 00000000000000b Info7
0000000000 00000000000000c Info7
2222222222 11111111111111b Info7
2222222222 11111111111111d Info7
1111111111 22222222222222c Info7
查询
SELECT
Table1.ID1,
Table1.ID2,
Table1.Field1,
Table1.Field2,
Table1.Field3,
Table1.Field4,
Table2.Field1,
Table2.Field2,
Table3.Field1
FROM Table1
LEFT JOIN Table2
ON Table1.ID1=Table2.ID2 AND Table1.ID2=Table2.ID2
LEFT JOIN Table3
ON Table1.ID1=Table3.ID2 AND LEFT(Table1.ID2,14)=LEFT(Table3.ID2,14)
我得到的回应是
0000000000 00000000000000a Info1 Info2 Info3 Info4 Info5 Info6 Info7
0000000000 00000000000000a Info1 Info2 Info3 Info4 Info5 Info6 Info7
0000000000 00000000000000a Info1 Info2 Info3 Info4 Info5 Info6 Info7
2222222222 11111111111111b Info1 Info2 Info3 Info4 Info5 Info6 Info7
2222222222 11111111111111b Info1 Info2 Info3 Info4 Info5 Info6 Info7
1111111111 22222222222222c Info1 Info2 Info3 Info4 Info5 Info6 Info7
我想要的是
0000000000 00000000000000a Info1 Info2 Info3 Info4 Info5 Info6 Info7
2222222222 11111111111111b Info1 Info2 Info3 Info4 Info5 Info6 Info7
1111111111 22222222222222c Info1 Info2 Info3 Info4 Info5 Info6 Info7
答案 0 :(得分:2)
我会猜测并说你使用mssql,(使用top和stuff)所以如果使用2005 +
这将会正常工作SELECT
Table1.ID1,
Table1.ID2,
Table1.Field1,
Table1.Field2,
Table1.Field3,
Table1.Field4,
Table2.Field1,
Table2.Field2,
t3.Field1
FROM Table1
LEFT JOIN Table2
ON Table1.ID1=Table2.ID2 AND Table1.ID2=Table2.ID2
outer apply (select top 1 * from table3 where LEFT(Table1.ID2,14)=LEFT(Table3.ID2,14)) t3
答案 1 :(得分:0)
除非我遗漏了要求中的内容,否则如果您只想为ID1
中的每个Table3
返回一条记录,那么您应该可以执行以下操作:
SELECT
t1.ID1,
t1.ID2,
t1.Field1,
t1.Field2,
t1.Field3,
t1.Field4,
t2.Field1,
t2.Field2,
tb3.Field1
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID1=t2.ID1
AND t1.ID2=t2.ID2
LEFT JOIN
(
select min(id2) minid2, id1
from Table3
group by id1
) t3
ON t1.ID1=t3.id1
AND LEFT(t1.ID2,14)=LEFT(t3.minid2,14)
left join table3 tb3
on t3.minid2 = tb3.id2
and t3.id1 = tb3.id1