22,298
社区成员
发帖
与我相关
我的任务
分享select
count(publicinst2_ .id)
from BENEFIT_SERVICE benefitser0_
right outer join INSTI_BENEFIT_SERVICE publicinst1_ on benefitser0_.ID=publicinst1_.BENEFIT_SERVICE_ID
right outer join INSTITUTION publicinst2_ on publicinst1_.INSTI_ID=publicinst2_.ID
where ( benefitser0_.STATUS>-9) and publicinst2_.AREA_ID=295 and publicinst2_.STATUS=1 --order by benefitser0_.POST_TIME desc;select
count(publicinst2_ .id)
from
BENEFIT_SERVICE benefitser0_
right outer join
INSTI_BENEFIT_SERVICE publicinst1_ ---你这个命名到是很奇怪 其他的没什么问题
on
benefitser0_.ID=publicinst1_.BENEFIT_SERVICE_ID
right outer join
INSTITUTION publicinst2_
on
publicinst1_.INSTI_ID=publicinst2_.ID
where
( benefitser0_.STATUS>-9) and publicinst2_.AREA_ID=295 and publicinst2_.STATUS=1 --order by benefitser0_.POST_TIME desc;select
count(publicinst2_ .id)
from
BENEFIT_SERVICE benefitser0_
right outer join
INSTI_BENEFIT_SERVICE publicinst1_ ---你这个命名到是很奇怪 其他的没什么问题
on
benefitser0_.ID=publicinst1_.BENEFIT_SERVICE_ID
right outer join
INSTITUTION publicinst2_
on
publicinst1_.INSTI_ID=publicinst2_.ID
where
( benefitser0_.STATUS>-9) and publicinst2_.AREA_ID=295 and publicinst2_.STATUS=1 --order by
benefitser0_.POST_TIME desc;
select count(publicinst2_ .id)
from BENEFIT_SERVICE benefitser0_
right outer join INSTI_BENEFIT_SERVICE publicinst1_ on
benefitser0_.ID=publicinst1_.BENEFIT_SERVICE_ID
right outer join INSTITUTION publicinst2_ on publicinst1_.INSTI_ID=publicinst2_.ID where ( benefitser0_.STATUS>-9) and publicinst2_.AREA_ID=295 and publicinst2_.STATUS=1 --order by benefitser0_.POST_TIME desc;
问下,这些连续的right outer on中,根据什么判断哪个表式主表呢?
IF OBJECT_ID('dbo.ta') IS NOT NULL
DROP TABLE ta ;
IF OBJECT_ID('dbo.tb') IS NOT NULL
DROP TABLE tb ;
CREATE TABLE ta
(
Keya VARCHAR(5),
Cola VARCHAR(10)
)
CREATE TABLE tb
(
Keyb VARCHAR(5),
Colb VARCHAR(10)
)
INSERT INTO ta SELECT '10','Aa'
UNION ALL SELECT '11','Ab'
UNION ALL SELECT '12','Ac'
UNION ALL SELECT '9','Ae'
INSERT INTO tb SELECT '10','Ba'
UNION ALL SELECT '11','Bb'
UNION ALL SELECT '13','Bc'
UNION ALL SELECT '14','Bd'
SELECT ta.*,tb.*
FROM ta
RIGHT OUTER JOIN tb
ON ta.Keya = tb.Keyb
Keya Cola Keyb Colb
----- ---------- ----- ----------
10 Aa 10 Ba
11 Ab 11 Bb
NULL NULL 13 Bc
NULL NULL 14 Bd
-- tb 中有多出的Keyb 13 , 14 因为我们使用了right outer join 故tb中的为保留表,ta中没有对应的记录,这样用NULL来代替。keya 为9的则不符合on条件,故没有列出。