我有一个有效的查询,就像这样:
Select
count(InsuranceOrderLine.AntallPotensiale) as potensiale,
COUNT(InsuranceOrderLine.AntallSolgt) as Solgt,
InsuranceProduct.Name,
InsuranceProductCategory.Name as Kategori
From
InsuranceOrderLine, InsuranceProduct, InsuranceProductCategory
where
InsuranceOrderLine.FKInsuranceProductId = InsuranceProduct.InsuranceProductID
and InsuranceProduct.FKInsuranceProductCategory = InsuranceProductCategory.InsuranceProductCategoryID
Group by
InsuranceProduct.name, InsuranceProductCategory.Name
此查询返回我需要的内容,但当我尝试添加更多表(InsuranceOrder
)以便能够获取regardingUser
列时,则所有计数值都很高。
Select
count(InsuranceOrderLine.AntallPotensiale) as Potensiale,
COUNT(InsuranceOrderLine.AntallSolgt) as Solgt,
InsuranceProduct.Name,
InsuranceProductCategory.Name as Kategori,
RegardingUser
From
InsuranceOrderLine, InsuranceProduct, InsuranceProductCategory, InsuranceSalesLead
where
InsuranceOrderLine.FKInsuranceProductId = InsuranceProduct.InsuranceProductID
and InsuranceProduct.FKInsuranceProductCategory = InsuranceProductCategory.InsuranceProductCategoryID
Group by
InsuranceProduct.name, InsuranceProductCategory.Name,RegardingUser
提前致谢
答案 0 :(得分:4)
您在FROM
语句中添加了一个表格,但没有为该表格指定任何JOIN
条件 - 因此您之前的结果集将执行FULL OUTER JOIN
(笛卡尔产品)与您的新表!当然,你会得到重复的数据......
这是我建议永远不要使用旧的旧式JOIN
的原因之一 - 不要只是在FROM
语句中列出以逗号分隔的一组表。
始终使用INNER JOIN
,LEFT OUTER JOIN
等新的 ANSI标准JOIN 语法:
SELECT
count(iol.AntallPotensiale) as Potensiale,
COUNT(iol.AntallSolgt) as Solgt,
ip.Name,
ipc.Name as Kategori,
isl.RegardingUser
FROM
dbo.InsuranceOrderLine iol
INNER JOIN
dbo.InsuranceProduct ip ON iol.FKInsuranceProductId = ip.InsuranceProductID
INNER JOIN
dbo.InsuranceProductCategory ipc ON ip.FKInsuranceProductCategory = ipc.InsuranceProductCategoryID
INNER JOIN
dbo.InsuranceSalesLead isl ON ???????? -- JOIN condition missing here !!
执行此操作时,您首先会立即看到此处缺少JOIN
条件 - 此新表InsuranceSalesLead
如何链接到此处已使用的任何其他表SQL语句??
其次,你的意图更加清晰,因为链接表格的JOIN
条件是它们所属的地方 - 与JOIN
一致 - 并且不会混淆你的WHERE
条款...
答案 1 :(得分:0)
看起来你添加了表连接,它略微增加了行数 - 确保你正确地加入了表。并且要注意几个连接表上的聚合函数 - 连接通常会导致重复