table1:
pno pndsc
a1 abc1
a2 abc2
a3 abc3
table2:
pno pndsc
a1 abc1
我希望是两表合并成一个表视图
table3:
pno pndsc t
a1 abc1 1
a2 abc2 0
a3 abc3 0
另我十分想了解这样的视图性能如何,因为两表数据量大,而且我需要很频繁操作这个视图,或有什么更佳的方法
pno pndsc
a1 abc1
a2 abc2
a3 abc3
table2:
pno pndsc
a1 abc1
我希望是两表合并成一个表视图
table3:
pno pndsc t
a1 abc1 1
a2 abc2 0
a3 abc3 0
另我十分想了解这样的视图性能如何,因为两表数据量大,而且我需要很频繁操作这个视图,或有什么更佳的方法
解决方案 »
- 怎样取出某列最大值的所有数据
- 怎样在SQL查询分析器里面将ACCESS的某列更新为数值0
- 请教有关字符型自增列的触发器
- 请问insert into ..select..语句select..这里不能有变量吗?
- 关于sql server 2008 安装时的问题!
- 我有没有必要在每一个ASP文件中使用“Option Explicit”?
- sql server2008导数据入oracle10g
- 高分求优化后的sql语句
- 将数据发送到运行IIS的计算机的请求失败 有关详细信息 请参阅HRESULT
- 求一个存储过程(a,b,c三个表;b和a有主外键,c和b、a有主外键)要效率高的!!!
- 如何用数据库备份文件恢复数据库(在线等)
- 存储过程中是否都需要return才能得到结果?
COUNT(b.pno) AS t
FROM tb1 AS a
LEFT OUTER JOIN tb2 AS b
ON a.pndsc=b.pndsc
AND a.pno=b.pno
GROUP BY a.pno,a.pndsc
from table1 a left join table2 b
on a.pno=b.pno and a.pndsc=b.pndsc
group by a.pno,a.pndsc
insert @t1 select 'a1' , 'abc1'
insert @t1 select 'a2' , 'abc2'
insert @t1 select 'a3' , 'abc3'
declare @t2 table(pno varchar(5),pndsc varchar(10))
insert @t2 select 'a1', 'abc1'
select pno,pndsc,count(*)-1 t
from (
select * from @t1
union all
select * from @t2)t
group by pno,pndsc /*
pno pndsc t
----- ---------- -----------
a1 abc1 1
a2 abc2 0
a3 abc3 0
*/
pno,pndsc,
t=(SELECT COUNT(*)
FROM tb2
WHERE pno=a.pno
AND pndsc=a.pndsc)
FROM tb1 AS a
declare @t1 table(pno varchar(2),pndsc varchar(4))
declare @t2 table(pno varchar(2),pndsc varchar(4))
insert into @t1 select 'a1','abc1'
union all select 'a2','abc2'
union all select 'a2','abc3'
insert @t2 select 'a1','abc1'select a.*,t=(case when a.pno=b.pno then 1 else 0 end)
from @t1 a left outer
join @t2 b on a.pno=b.pno
declare @t1 table(pno varchar(2),pndsc varchar(4))
declare @t2 table(pno varchar(2),pndsc varchar(4))
insert into @t1 select 'a1','abc1'
union all select 'a2','abc2'
union all select 'a2','abc3'insert @t2 select 'a1','abc1'
insert @t2 select 'a1','abc1'select a.*,t=(case when a.pno=b.pno then 1 else 0 end)
from @t1 a
left outer join @t2 b on a.pno=b.pno
--结果:
a1 abc1 1
a1 abc1 1
a2 abc2 0
a2 abc3 0有bug还是要分组
from @t1 a
left outer join @t2 b on a.pno=b.pno
感觉楼主数据太少,所以开始几位都想错了。
如果
table1:
pno pndsc
a1 abc1
a2 abc2
a3 abc3
table2:
pno pndsc
a1 abc1
a1 abc1
a2 abc2
a3 abc3
是不是要得到
table3:
pno pndsc t
a1 abc1 2
a2 abc2 1
a3 abc3 1
?????
似乎其它方法(子查询、distinct,in,exists...)对效率损失更大 ^)^给个参考:select a.pno,a.pndsc,b.t
from table1 a
join (select pno,count(1) from table2 group by pno) b
on a.pno=b.pno
另外,就2个表的数据,没必要建视图。
SELECT a.*,ISNULL(cnt,0) t
FROM table1 a
LEFT JOIN
(SELECT pno,pndsc,COUNT(*) cnt FROM table2 GROUP BY pno,pndsc) b
ON a.pno=b.pno AND a.pndsc=b.pndsc
我视图还需要与其它表进行联合查询,所以要用视图
select a.pno,a.pndsc,b.t from table1 a join
(select table1.pno,table1.pnsdc, count(*) t from table1 join
table2 on table1.pno=table2.pno) b
on a.pno=b.pno
select a.pno,a.pndsc,b.t from table1 a left join
(select table1.pno,table1.pnsdc, count(*) t from table1 join
table2 on table1.pno=table2.pno) b
on a.pno=b.pno