Sql 查询问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 16:11:05
第一种
select t1.类型编号,t1.类型名
(select count(t2.商品编号) from 表2 t2 where t2.类型编号=t1.类型编号) as 商品数量,
(select sum(t2.累计数量) from 表2 t2 where t2.类型编号=t1.类型编号) as 累计数量,
(select sum(t2.访问人气) from 表2 t2 where t2.类型编号=t1.类型编号) as 人气
from 表1 t1

第二种
select t1.类型编号,t1.类型名,
count(t2.商品编号) as 商品数量,
sum(t2.累计数量) as 累计数量,
sum(t2.访问人气) as 人气
from 表1 t1 inner join 表2 t2 on t2.类型编号=t1.类型编号
group by t1.类型编号,t1.类型名

我想得到第一种的结果但又觉得查询效率低。
第二种查询结果只能查出部分有商品的数据,而第一种查询能得到全部表1数据。
请问下要得到第一种查询结果有没查询效率高查询语句

SELECT t1.类型编号,t1.类型名,ISNULL(t2.商品数量,0) AS 商品数量,
ISNULL(t2.累计数量,0) AS 累计数量,
ISNULL(t2.人气,0) AS 人气
FROM
表1 AS t1
LEFT JOIN
(
SELECT t2.类型编号,COUNT(1) AS 商品数量,
SUM(t2.累计数量) AS 累计数量,
SUM(t2.访问人气) AS 人气
FROM 表2 AS t2
GROUP BY t2.类型编号
) AS t2
ON t1.类型编号 = t2.类型编号

"第二种查询结果只能查出部分有商品的数据",这个有可能表里的关联数据有空值,尝试用下左外连接看看能不能得出你想要的结果吧

select t1.类型编号,t1.类型名,
count(t2.商品编号) as 商品数量,
sum(t2.累计数量) as 累计数量,
sum(t2.访问人气) as 人气
from 表1 t1 , 表2 t2
where t2.类型编号=t1.类型编号(+)
group by t1.类型编号,t1.类型名
注意:(+)是解决问题的关键

采用左连接查询

SQL内部做过优化,它不会做无用功的。不用担心效率低。