我需要左连接两个表。左边有大约1500个条目。这些表有三列必须匹配正确的连接。但是,我无法让它发挥作用。用AND添加所有三个表会产生不正确的结果; 此外,我只需要保留三个ID和#34; someinfo"。我怎么做到这一点?在select中添加字段会产生数百万的额外结果。我是否必须先执行连接然后查询结果? - 意外结果,三连接,结果太多 - 数百万结果 表: SELECT t1.*
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.id_1 = t2.id_1
AND t1.id_2 = t2.id_2
AND t1.id_3 = t2.id_3
SELECT t1.*, t2.someinfo
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.id_1 = t2.id_1
AND t1.id_2 = t2.id_2
AND t1.id_3 = t2.id_3
答案 0 :(得分:2)
id_1
,id_2
和id_3
的组合对Table2
是否唯一?换句话说,如果id_1
= 555,id_2
= 123,id_3
= 10,这三个值一起只出现在表格中一次?这是第一个查询返回太多结果的唯一原因,否则它应该返回相同的数据,就像只在SELECT
上执行Table1
一样。
考虑以下代码:
declare @Table1 table (id_1 int, id_2 int, id_3 int)
declare @Table2 table (id_1 int, id_2 int, id_3 int,
someinfo varchar(20), someotherinfo varchar(20))
insert into @Table1 (id_1, id_2, id_3) values (555, 123, 10)
insert into @Table1 (id_1, id_2, id_3) values (555, 123, 10)
insert into @Table2 (id_1, id_2, id_3, someinfo, someotherinfo)
values (555, 123, 10, 'house', 'new')
insert into @Table2 (id_1, id_2, id_3, someinfo, someotherinfo)
values (555, 123, 11, 'tree', 'new')
insert into @Table2 (id_1, id_2, id_3, someinfo, someotherinfo)
values (555, 124, 1, 'car', 'new')
这将为您提供两个包含以下数据的表格:
您的第一个SELECT
语句将产生与Table1
现在,如果我们添加:
insert into @Table2 (id_1, id_2, id_3, someinfo, someotherinfo)
values (555, 123, 10, 'house', 'old')
所以我们的表数据现在看起来像:
您的第一个SELECT
现在将产生:
注意555,123,10如何出现两次。如果将此效果乘以1500行,则会产生大量(看似)额外数据。我认为这也可能是您在第二个查询中看到“数百万”结果的原因,以及它与第一个查询不同的原因是因为您现在正在添加来自someinfo
的{{1}}字段,不同的文本与非唯一ID匹配。
Table2
,它就会生成您期望的结果
DISTINCT