SQL查询正在创建太多重复的行

问题描述 投票:0回答:3

我在使用sql查询以及如何显示输出时遇到问题,您看到的是,我有3个表,并且至少有一个共同的字段,问题是当我将2个表连接在一起时,所需的信息会正确显示,但是当我加入第三个时,输出将变得疯狂,并且过多地重复了结果,因此我需要弄清楚它为什么会发生,在下面,我将向您显示所有表格以及彼此之间的关系

这是表格之间的相互关系

l

这是使第一个表(dbo_predios)成为头三个字段的唯一方式enter image description here

这也是第二个表(dbo_permisos_obras_mayores)的制作方式,在这种情况下,前三个字段也是唯一相关的,后两个字段可以匹配第一个表(dbo_predios)enter image description here

这是第三个表(dbo_recepciones_obras_mayores)的制作方式,第四个字段在这种情况下是唯一相关的,它可以与第二个表(dbo_permisos_obras_mayores)关联到同一个名称字段

enter image description here

好,现在从结构上讲,现在我正在执行的查询如下:

SELECT
dbo_predios.codigo_unico_predio,
dbo_permisos_obras_mayores.numero_permiso_edificacion,
dbo_permisos_obras_mayores.fecha_permiso_edificacion
FROM dbo_predios
INNER JOIN  dbo_permisos_obras_mayores ON dbo_predios.codigo_manzana_predio = dbo_permisos_obras_mayores.codigo_manzana_predio AND dbo_predios.codigo_lote_predio = dbo_permisos_obras_mayores.codigo_lote_predio
INNER JOIN  dbo_recepciones_obras_mayores ON dbo_permisos_obras_mayores.numero_recepcion_permiso = dbo_recepciones_obras_mayores.numero_recepcion_permiso
WHERE       dbo_permisos_obras_mayores.codigo_manzana_predio = 9402 AND dbo_permisos_obras_mayores.codigo_lote_predio = 30

并且以这种方式执行查询的结果是这样的:

enter image description here

稍后我做了一些试验和错误,并删除了第二条内部连接线,结果令我惊讶,这是发生的事情:

enter image description here

结论:简而言之,第三张表是引起笛卡尔积的原因,为什么?我希望我知道为什么,您如何看待这个特殊情况?在此先感谢您能给我的任何帮助。

sql sql-server database sql-server-2008-r2 inner-join
3个回答
1
投票

[好吧,我做了Icarus告诉我的事情,并且我发现了有用的东西,你看,我犯了一个大错误,我尝试的数字组合没有numero_recepcion_permiso,所以输出列完全空白,但是当有一个实际的numero_recepcion_permiso可以正确显示时,无论如何我仍然需要不会输出那么多重复行,我该如何解决?谢谢你们到目前为止的帮助


1
投票

首先,请确保两个值都存在于两个字段中,并且它们实际上匹配,否则可能会生成一定数量的重复行,但是由于我不知道您要做什么,所以我无法确定重复行的数量实际数据是,但是可能会解决一些问题


0
投票

这里是解决方案-因为您说的是numero_recepcion_permiso为空,所以只需将条件添加到内部联接中,以排除空联接:

© www.soinside.com 2019 - 2024. All rights reserved.