解决方案 »
- 救SQL CODE 如可实现这样的显示?
- 怎样将数据库中的一个字段所有的纪录全部都负值为:cd
- 焦急重发!从access升级到sql server后的一个奇怪错误!请大家帮忙看看!
- 各位高手,安装SQL SERVER出错,帮我啊,急!
- 查询最后一次出现的记录数量!怎样提取查询出来的结果在一个月内的总和?
- 如何在存储过程内部获得查询的结果?
- SQL高手看过来,高分求一句从双表中取值的SQL语句
- 求助SQL大侠:这个SQL语句怎么写呢?
- 头疼:大虾们,导表的所有结构、所有数据
- 谁有ADO中的Recordset.updatebatch的例子
- centos 二进制安装MYSQL
- 4表联合查询,过滤重复数据
left join
(
select col1,COUNT(1) as total from tC
group by col1 --统计出C表中A的ID的次数,这个A的ID处出现在C表中的
)t on ta.col1=t.col1
create table tA
(
col1 int,
col2 varchar(50)
)truncate table tAdeclare @i int
set @i=1
while @i<=10000
begin
insert into tA values (@i,NEWID())
set @i=@i+1
end
create table tB
(
col1 int,
col2 int,
col3 varchar(50)
)
insert into tB values (RAND()*100000,RAND()*100000,NEWID())
go 100000create table tC
(
col1 int,
col2 int,
col3 varchar(50)
)
insert into tC values (RAND()*100000,RAND()*100000,NEWID())
go 50000--AB之间靠col1关联,BC之间靠col2关联select
ta.col1,tb.col1,tb.col2,tc.col2,
CASE WHEN (TB.col1 is null or tc.col1 is null) then 0
else COUNT(1) over(partition by ta.col1) end as total
from tA left join tB on ta.col1=tb.col1 left join tC on tb.col2=tc.col2
--where (有的话)过滤条件
--order by tA.col1,没必要就不用排序了
A.ID=B.CUSTOMERID
B.ORDERID=C.ORDERID
select A.ID,
isnull(D.qty,0) 'qty'
from A表 A
left join
(select B.CUSTOMERID,count(1) 'qty'
from B表 B
inner join C表 C on B.ORDERID=C.ORDERID
group by B.CUSTOMERID) D on A.ID=D.CUSTOMERID另:
A表上最好要有索引(ID)
B表上最好要有索引(CUSTOMERID,ORDERID)
C表上最好要有索引(ORDERID)
(4784 行受影响)
表 'Dealers'。扫描计数 33,逻辑读取 346 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'QuotePrice'。扫描计数 33,逻辑读取 5286 次,物理读取 273 次,预读 5274 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'QuoteCarSelled'。扫描计数 33,逻辑读取 9831 次,物理读取 374 次,预读 9775 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'QuotePrice_Del'。扫描计数 33,逻辑读取 11359 次,物理读取 317 次,预读 11423 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。请问这是我的查询计划 你觉得我的sql还能优化么?
表 'Dealers'。扫描计数 33,逻辑读取 346 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'QuotePrice'。扫描计数 33,逻辑读取 5286 次,物理读取 273 次,预读 5274 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'QuoteCarSelled'。扫描计数 33,逻辑读取 9831 次,物理读取 374 次,预读 9775 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'QuotePrice_Del'。扫描计数 33,逻辑读取 11359 次,物理读取 317 次,预读 11423 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。请问这是我的查询计划 你觉得我的sql还能优化么?
select A.ID,
isnull(D.qty,0) 'qty'
from A表 A
left join
(select B.CUSTOMERID,count(1) 'qty'
from B表 B
inner join C表 C on B.ORDERID=C.ORDERID
group by B.CUSTOMERID) D on A.ID=D.CUSTOMERID把图贴上来
先从宏观上看,执行时间?鄙人写法与你原有的写法哪个执行时间少?